{
  "id": "509228bb05720b462e4b934204b0bece",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.11",
  "solcLongVersion": "0.6.11+commit.5ef660b1",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/core/stake-locker/v1/StakeLocker.sol": {
        "content": "// SPDX-License-Identifier: AGPL-3.0-or-later // hevm: flattened sources of contracts/core/stake-locker/v1/StakeLocker.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/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/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/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////// 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/core/stake-locker/v1/StakeLockerFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\"; */\n\n/* import { ExtendedFDT, SafeMath, SafeMathInt, SafeMathUint, SignedSafeMath } from \"../../funds-distribution-token/v1/ExtendedFDT.sol\"; */\n\n/* import { IStakeLockerFDT } from \"./interfaces/IStakeLockerFDT.sol\"; */\n\n/// @title StakeLockerFDT inherits ExtendedFDT and accounts for gains/losses for Stakers.\nabstract contract StakeLockerFDT is IStakeLockerFDT, ExtendedFDT {\n\n    using SafeMath       for uint256;\n    using SignedSafeMath for  int256;\n\n    IERC20 public override immutable fundsToken;\n\n    uint256 public override bptLosses;\n    uint256 public override lossesBalance;\n    uint256 public override fundsTokenBalance;\n\n    constructor(string memory name, string memory symbol, address _fundsToken) ExtendedFDT(name, symbol) public {\n        fundsToken = IERC20(_fundsToken);\n    }\n\n    /**\n        @dev    Updates loss accounting for `msg.sender`, recognizing losses.\n        @return losses The amount to be subtracted from a withdraw amount.\n     */\n    function _recognizeLosses() internal override returns (uint256 losses) {\n        losses = _prepareLossesWithdraw();\n\n        bptLosses = bptLosses.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 The difference of the new and previous losses balance.\n     */\n    function _updateLossesBalance() internal override returns (int256) {\n        uint256 _prevLossesTokenBalance = lossesBalance;\n\n        lossesBalance = bptLosses;\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 The difference of the new and previous interest balance.\n     */\n    function _updateFundsTokenBalance() internal virtual override returns (int256) {\n        uint256 _prevFundsTokenBalance = fundsTokenBalance;\n\n        fundsTokenBalance = fundsToken.balanceOf(address(this));\n\n        return int256(fundsTokenBalance).sub(int256(_prevFundsTokenBalance));\n    }\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////// 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/stake-locker/v1/StakeLocker.sol\n/* pragma solidity 0.6.11; */\n\n/* import { SignedSafeMath }    from \"../../../../lib/openzeppelin-contracts/contracts/math/SignedSafeMath.sol\"; */\n/* import { IERC20, SafeERC20 } from \"../../../../lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\"; */\n/* import { Pausable }          from \"../../../../lib/openzeppelin-contracts/contracts/utils/Pausable.sol\"; */\n\n/* import { SafeMathInt } from \"../../../libraries/math/v1/SafeMathInt.sol\"; */\n\n/* import { IBasicFDT }     from \"../../funds-distribution-token/v1/interfaces/IBasicFDT.sol\"; */\n/* import { IMapleGlobals } from \"../../globals/v1/interfaces/IMapleGlobals.sol\"; */\n/* import { IPool }         from \"../../pool/v1/interfaces/IPool.sol\"; */\n/* import { IPoolFactory }  from \"../../pool/v1/interfaces/IPoolFactory.sol\"; */\n\n/* import { IStakeLocker } from \"./interfaces/IStakeLocker.sol\"; */\n\n/* import { StakeLockerFDT } from \"./StakeLockerFDT.sol\"; */\n\n/// @title StakeLocker holds custody of stakeAsset tokens for a given Pool and earns revenue from interest.\ncontract StakeLocker is IStakeLocker, StakeLockerFDT, Pausable {\n\n    using SafeMathInt    for int256;\n    using SignedSafeMath for int256;\n    using SafeERC20      for IERC20;\n\n    uint256 constant WAD = 10 ** 18;  // Scaling factor for synthetic float division.\n\n    IERC20  public override immutable stakeAsset;\n\n    address public override immutable liquidityAsset;\n    address public override immutable pool;\n\n    uint256 public override lockupPeriod;\n\n    mapping(address => uint256)                     public override stakeDate;\n    mapping(address => uint256)                     public override unstakeCooldown;\n    mapping(address => bool)                        public override allowed;\n    mapping(address => mapping(address => uint256)) public override custodyAllowance;\n    mapping(address => uint256)                     public override totalCustodyAllowance;\n\n    bool public override openToPublic;  // Boolean opening StakeLocker to public for staking BPTs\n\n    constructor(\n        address _stakeAsset,\n        address _liquidityAsset,\n        address _pool\n    ) StakeLockerFDT(\"Maple StakeLocker\", \"MPLSTAKE\", _liquidityAsset) public {\n        liquidityAsset = _liquidityAsset;\n        stakeAsset     = IERC20(_stakeAsset);\n        pool           = _pool;\n        lockupPeriod   = 180 days;\n    }\n\n    /*****************/\n    /*** Modifiers ***/\n    /*****************/\n\n    /**\n        @dev Checks that an account can unstake given the following conditions: \n                 1. The Account is not the Pool Delegate and the Pool is in Finalized state. \n                 2. The Pool is in Initialized or Deactivated state. \n     */\n    modifier canUnstake(address from) {\n        IPool _pool = IPool(pool);\n\n        // The Pool cannot be finalized, but if it is, account cannot be the Pool Delegate.\n        require(!_pool.isPoolFinalized() || from != _pool.poolDelegate(), \"SL:STAKE_LOCKED\");\n        _;\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Governor.\n     */\n    modifier isGovernor() {\n        require(msg.sender == _globals().governor(), \"SL:NOT_GOV\");\n        _;\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Pool.\n     */\n    modifier isPool() {\n        require(msg.sender == pool, \"SL:NOT_P\");\n        _;\n    }\n\n    /**********************/\n    /*** Pool Functions ***/\n    /**********************/\n\n    function setAllowlist(address staker, bool status) public override {\n        _whenProtocolNotPaused();\n        _isValidPoolDelegate();\n        allowed[staker] = status;\n        emit AllowListUpdated(staker, status);\n    }\n\n    function openStakeLockerToPublic() external override {\n        _whenProtocolNotPaused();\n        _isValidPoolDelegate();\n        openToPublic = true;\n        emit StakeLockerOpened();\n    }\n\n    function setLockupPeriod(uint256 newLockupPeriod) external override {\n        _whenProtocolNotPaused();\n        _isValidPoolDelegate();\n        require(newLockupPeriod <= lockupPeriod, \"SL:INVALID_VALUE\");\n        lockupPeriod = newLockupPeriod;\n        emit LockupPeriodUpdated(newLockupPeriod);\n    }\n\n    function pull(address dst, uint256 amt) isPool external override {\n        stakeAsset.safeTransfer(dst, amt);\n    }\n\n    function updateLosses(uint256 bptsBurned) isPool external override {\n        bptLosses = bptLosses.add(bptsBurned);\n        updateLossesReceived();\n    }\n\n    /************************/\n    /*** Staker Functions ***/\n    /************************/\n\n    function stake(uint256 amt) whenNotPaused external override {\n        _whenProtocolNotPaused();\n        _isAllowed(msg.sender);\n\n        unstakeCooldown[msg.sender] = uint256(0);  // Reset account's unstake cooldown if Staker had previously intended to unstake.\n\n        _updateStakeDate(msg.sender, amt);\n\n        stakeAsset.safeTransferFrom(msg.sender, address(this), amt);\n        _mint(msg.sender, amt);\n\n        emit Stake(msg.sender, amt);\n        emit Cooldown(msg.sender, uint256(0));\n        emit BalanceUpdated(address(this), address(stakeAsset), stakeAsset.balanceOf(address(this)));\n    }\n\n    /**\n        @dev   Updates information used to calculate unstake delay.\n        @dev   It emits a `StakeDateUpdated` event.\n        @param account The Staker that deposited BPTs.\n        @param amt     Amount of BPTs the Staker has deposited.\n     */\n    function _updateStakeDate(address account, uint256 amt) internal {\n        uint256 prevDate = stakeDate[account];\n        uint256 balance = balanceOf(account);\n\n        // stakeDate + (now - stakeDate) * (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        stakeDate[account] = newDate;\n        emit StakeDateUpdated(account, newDate);\n    }\n\n    function intendToUnstake() external override {\n        require(balanceOf(msg.sender) != uint256(0), \"SL:ZERO_BALANCE\");\n        unstakeCooldown[msg.sender] = block.timestamp;\n        emit Cooldown(msg.sender, block.timestamp);\n    }\n\n    function cancelUnstake() external override {\n        require(unstakeCooldown[msg.sender] != uint256(0), \"SL:NOT_UNSTAKING\");\n        unstakeCooldown[msg.sender] = 0;\n        emit Cooldown(msg.sender, uint256(0));\n    }\n\n    function unstake(uint256 amt) external override canUnstake(msg.sender) {\n        _whenProtocolNotPaused();\n\n        require(balanceOf(msg.sender).sub(amt) >= totalCustodyAllowance[msg.sender], \"SL:INSUF_UNSTAKEABLE_BAL\");  // Account can only unstake tokens that aren't custodied\n        require(isUnstakeAllowed(msg.sender),                                        \"SL:OUTSIDE_COOLDOWN\");\n        require(stakeDate[msg.sender].add(lockupPeriod) <= block.timestamp,          \"SL:FUNDS_LOCKED\");\n\n        updateFundsReceived();   // Account for any funds transferred into contract since last call.\n        _burn(msg.sender, amt);  // Burn the corresponding StakeLockerFDTs balance.\n        withdrawFunds();         // Transfer the full entitled Liquidity Asset interest.\n\n        stakeAsset.safeTransfer(msg.sender, amt.sub(_recognizeLosses()));  // Unstake amount minus losses.\n\n        emit Unstake(msg.sender, amt);\n        emit BalanceUpdated(address(this), address(stakeAsset), stakeAsset.balanceOf(address(this)));\n    }\n\n    function withdrawFunds() public override(IBasicFDT, IStakeLocker) {\n        _whenProtocolNotPaused();\n\n        uint256 withdrawableFunds = _prepareWithdraw();\n\n        if (withdrawableFunds == uint256(0)) return;\n\n        fundsToken.safeTransfer(msg.sender, withdrawableFunds);\n        emit BalanceUpdated(address(this), address(fundsToken), fundsToken.balanceOf(address(this)));\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        require(custodian != address(0),                    \"SL:INVALID_CUSTODIAN\");\n        require(amount    != uint256(0),                    \"SL:INVALID_AMT\");\n        require(newTotalAllowance <= balanceOf(msg.sender), \"SL:INSUF_BALANCE\");\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        require(to == from,             \"SL:INVALID_RECEIVER\");\n        require(amount != uint256(0),   \"SL:INVALID_AMT\");\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        @dev   Transfers StakeLockerFDTs.\n        @param from Address sending   StakeLockerFDTs.\n        @param to   Address receiving StakeLockerFDTs.\n        @param wad  Amount of StakeLockerFDTs to transfer.\n     */\n    function _transfer(address from, address to, uint256 wad) internal override canUnstake(from) {\n        _whenProtocolNotPaused();\n        require(stakeDate[from].add(lockupPeriod) <= block.timestamp,    \"SL:FUNDS_LOCKED\");            // Restrict withdrawal during lockup period\n        require(balanceOf(from).sub(wad) >= totalCustodyAllowance[from], \"SL:INSUF_TRANSFERABLE_BAL\");  // Account can only transfer tokens that aren't custodied\n        require(isReceiveAllowed(unstakeCooldown[to]),                   \"SL:RECIPIENT_NOT_ALLOWED\");   // Recipient must not be currently unstaking\n        require(recognizableLossesOf(from) == uint256(0),                \"SL:RECOG_LOSSES\");            // If a staker has unrecognized losses, they must recognize losses through unstake\n        _updateStakeDate(to, wad);                                                                      // Update stake date of recipient\n        super._transfer(from, to, wad);\n    }\n\n    /***********************/\n    /*** Admin Functions ***/\n    /***********************/\n\n    function pause() external override {\n        _isValidPoolDelegateOrPoolAdmin();\n        super._pause();\n    }\n\n    function unpause() external override {\n        _isValidPoolDelegateOrPoolAdmin();\n        super._unpause();\n    }\n\n    /************************/\n    /*** Helper Functions ***/\n    /************************/\n\n    function isUnstakeAllowed(address from) public override view returns (bool) {\n        IMapleGlobals globals = _globals();\n        return (block.timestamp - (unstakeCooldown[from] + globals.stakerCooldownPeriod())) <= globals.stakerUnstakeWindow();\n    }\n\n    function isReceiveAllowed(uint256 _unstakeCooldown) public override view returns (bool) {\n        IMapleGlobals globals = _globals();\n        return block.timestamp > (_unstakeCooldown + globals.stakerCooldownPeriod() + globals.stakerUnstakeWindow());\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Pool Delegate or a Pool Admin.\n     */\n    function _isValidPoolDelegateOrPoolAdmin() internal view {\n        require(msg.sender == IPool(pool).poolDelegate() || IPool(pool).poolAdmins(msg.sender), \"SL:NOT_DELEGATE_OR_ADMIN\");\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Pool Delegate.\n     */\n    function _isValidPoolDelegate() internal view {\n        require(msg.sender == IPool(pool).poolDelegate(), \"SL:NOT_DELEGATE\");\n    }\n\n    /**\n        @dev Checks that `msg.sender` is allowed to stake.\n     */\n    function _isAllowed(address account) internal view {\n        require(\n            openToPublic || allowed[account] || account == IPool(pool).poolDelegate(),\n            \"SL:NOT_ALLOWED\"\n        );\n    }\n\n    /**\n        @dev Returns the MapleGlobals instance.\n     */\n    function _globals() internal view returns (IMapleGlobals) {\n        return IMapleGlobals(IPoolFactory(IPool(pool).superFactory()).globals());\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(), \"SL: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/stake-locker/v1/StakeLocker.sol": {
        "Address": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220479cc1636dd0c2a53547edf2d869c42e6ab19c06631a2423ab1387ba032ad52a64736f6c634300060b0033",
              "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 SELFBALANCE SWAP13 0xC1 PUSH4 0x6DD0C2A5 CALLDATALOAD SELFBALANCE 0xED CALLCODE 0xD8 PUSH10 0xC42E6AB19C06631A2423 0xAB SGT DUP8 0xBA SUB 0x2A 0xD5 0x2A PUSH5 0x736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "91508:6704:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220479cc1636dd0c2a53547edf2d869c42e6ab19c06631a2423ab1387ba032ad52a64736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFBALANCE SWAP13 0xC1 PUSH4 0x6DD0C2A5 CALLDATALOAD SELFBALANCE 0xED CALLCODE 0xD8 PUSH10 0xC42E6AB19C06631A2423 0xAB SGT DUP8 0xBA SUB 0x2A 0xD5 0x2A PUSH5 0x736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "91508: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": "60806040523480156200001157600080fd5b5060405162000ca538038062000ca5833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060405250508251620001b491506003906020850190620001e0565b508051620001ca906004906020840190620001e0565b50506005805460ff191660121790555062000285565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022357805160ff191683800117855562000253565b8280016001018555821562000253579182015b828111156200025357825182559160200191906001019062000236565b506200026192915062000265565b5090565b6200028291905b808211156200026157600081556001016200026c565b90565b610a1080620002956000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103ff565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610408565b6101736004803603602081101561021b57600080fd5b50356001600160a01b031661045c565b6100b6610477565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104d8565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610546565b610173600480360360408110156102a157600080fd5b506001600160a01b038135811691602001351661055a565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610585565b8484610589565b50600192915050565b60025490565b600061037f848484610675565b6103f58461038b610585565b6103f085604051806060016040528060288152602001610945602891396001600160a01b038a166000908152600160205260408120906103c9610585565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6107dc16565b610589565b5060019392505050565b60055460ff1690565b6000610363610415610585565b846103f08560016000610426610585565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61087316565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104e5610585565b846103f0856040518060600160405280602581526020016109b6602591396001600061050f610585565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6107dc16565b6000610363610553610585565b8484610675565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806109926024913960400191505060405180910390fd5b6001600160a01b0382166106135760405162461bcd60e51b81526004018080602001828103825260228152602001806108fd6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106ba5760405162461bcd60e51b815260040180806020018281038252602581526020018061096d6025913960400191505060405180910390fd5b6001600160a01b0382166106ff5760405162461bcd60e51b81526004018080602001828103825260238152602001806108da6023913960400191505060405180910390fd5b61070a8383836108d4565b61074d8160405180606001604052806026815260200161091f602691396001600160a01b038616600090815260208190526040902054919063ffffffff6107dc16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610782908263ffffffff61087316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561086b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610830578181015183820152602001610818565b50505050905090810190601f16801561085d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108cd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b7f81683f61d9cd95033d020af24f07f1b91c80c724968880fba1c82f6df10f864736f6c634300060b0033",
              "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 0x7358221220B7F8 AND DUP4 0xF6 SAR SWAP13 0xD9 POP CALLER 0xD0 KECCAK256 0xAF 0x24 CREATE PUSH32 0x1B91C80C724968880FBA1C82F6DF10F864736F6C634300060B00330000000000 ",
              "sourceMap": "16964:9426:0:-:0;;;17601:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17601:145:0;;;;;;;;;;-1:-1:-1;17601:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17601:145:0;;;;;;;;;;-1:-1:-1;17601:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17601:145:0;;-1:-1:-1;;17675:13:0;;;;-1:-1:-1;17675:5:0;;:13;;;;;:::i;:::-;-1:-1:-1;17698:17:0;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;17725:9:0;:14;;-1:-1:-1;;17725:14:0;17737:2;17725:14;;;-1:-1:-1;16964:9426:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16964:9426:0;;;-1:-1:-1;16964:9426:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103ff565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610408565b6101736004803603602081101561021b57600080fd5b50356001600160a01b031661045c565b6100b6610477565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104d8565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610546565b610173600480360360408110156102a157600080fd5b506001600160a01b038135811691602001351661055a565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610585565b8484610589565b50600192915050565b60025490565b600061037f848484610675565b6103f58461038b610585565b6103f085604051806060016040528060288152602001610945602891396001600160a01b038a166000908152600160205260408120906103c9610585565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6107dc16565b610589565b5060019392505050565b60055460ff1690565b6000610363610415610585565b846103f08560016000610426610585565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61087316565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104e5610585565b846103f0856040518060600160405280602581526020016109b6602591396001600061050f610585565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6107dc16565b6000610363610553610585565b8484610675565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806109926024913960400191505060405180910390fd5b6001600160a01b0382166106135760405162461bcd60e51b81526004018080602001828103825260228152602001806108fd6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106ba5760405162461bcd60e51b815260040180806020018281038252602581526020018061096d6025913960400191505060405180910390fd5b6001600160a01b0382166106ff5760405162461bcd60e51b81526004018080602001828103825260238152602001806108da6023913960400191505060405180910390fd5b61070a8383836108d4565b61074d8160405180606001604052806026815260200161091f602691396001600160a01b038616600090815260208190526040902054919063ffffffff6107dc16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610782908263ffffffff61087316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561086b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610830578181015183820152602001610818565b50505050905090810190601f16801561085d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108cd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b7f81683f61d9cd95033d020af24f07f1b91c80c724968880fba1c82f6df10f864736f6c634300060b0033",
              "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 0x7358221220B7F8 AND DUP4 0xF6 SAR SWAP13 0xD9 POP CALLER 0xD0 KECCAK256 0xAF 0x24 CREATE PUSH32 0x1B91C80C724968880FBA1C82F6DF10F864736F6C634300060B00330000000000 ",
              "sourceMap": "16964:9426:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17811:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19847:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19847:166:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18854:98;;;:::i;:::-;;;;;;;;;;;;;;;;20480:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20480:317:0;;;;;;;;;;;;;;;;;:::i;18713:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21192:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21192:215:0;;;;;;;;:::i;19010:117::-;;;;;;;;;;;;;;;;-1:-1:-1;19010:117:0;-1:-1:-1;;;;;19010:117:0;;:::i;18005:85::-;;;:::i;21894:266::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21894:266:0;;;;;;;;:::i;19330:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19330:172:0;;;;;;;;:::i;19560:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19560:149:0;;;;;;;;;;:::i;17811:81::-;17880:5;17873:12;;;;;;;;-1:-1:-1;;17873:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17848:13;;17873:12;;17880:5;;17873:12;;17880:5;17873:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17811:81;:::o;19847:166::-;19930:4;19946:39;19955:12;:10;:12::i;:::-;19969:7;19978:6;19946:8;:39::i;:::-;-1:-1:-1;20002:4:0;19847:166;;;;:::o;18854:98::-;18933:12;;18854:98;:::o;20480:317::-;20586:4;20602:36;20612:6;20620:9;20631:6;20602:9;:36::i;:::-;20648:121;20657:6;20665:12;:10;:12::i;:::-;20679:89;20717:6;20679:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20679:19:0;;;;;;:11;:19;;;;;;20699:12;:10;:12::i;:::-;-1:-1:-1;;;;;20679:33:0;;;;;;;;;;;;-1:-1:-1;20679:33:0;;;:89;;:37;:89;:::i;:::-;20648:8;:121::i;:::-;-1:-1:-1;20786:4:0;20480:317;;;;;:::o;18713:81::-;18778:9;;;;18713:81;:::o;21192:215::-;21280:4;21296:83;21305:12;:10;:12::i;:::-;21319:7;21328:50;21367:10;21328:11;:25;21340:12;:10;:12::i;:::-;-1:-1:-1;;;;;21328:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21328:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;19010:117::-;-1:-1:-1;;;;;19102:18:0;19076:7;19102:18;;;;;;;;;;;;19010:117::o;18005:85::-;18076:7;18069:14;;;;;;;;-1:-1:-1;;18069:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18044:13;;18069:14;;18076:7;;18069:14;;18076:7;18069:14;;;;;;;;;;;;;;;;;;;;;;;;21894:266;21987:4;22003:129;22012:12;:10;:12::i;:::-;22026:7;22035:96;22074:15;22035:96;;;;;;;;;;;;;;;;;:11;:25;22047:12;:10;:12::i;:::-;-1:-1:-1;;;;;22035:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;22035:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;19330:172::-;19416:4;19432:42;19442:12;:10;:12::i;:::-;19456:9;19467:6;19432:9;:42::i;19560:149::-;-1:-1:-1;;;;;19675:18:0;;;19649:7;19675:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19560:149::o;15244:104::-;15331:10;15244:104;:::o;24958:340::-;-1:-1:-1;;;;;25059:19:0;;25051:68;;;;-1:-1:-1;;;25051:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25137:21:0;;25129:68;;;;-1:-1:-1;;;25129:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25208:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25259:32;;;;;;;;;;;;;;;;;24958:340;;;:::o;22634:530::-;-1:-1:-1;;;;;22739:20:0;;22731:70;;;;-1:-1:-1;;;22731:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22819:23:0;;22811:71;;;;-1:-1:-1;;;22811:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22893:47;22914:6;22922:9;22933:6;22893:20;:47::i;:::-;22971:71;22993:6;22971:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22971:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;22951:17:0;;;:9;:17;;;;;;;;;;;:91;;;;23075:20;;;;;;;:32;;23100:6;23075:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;23052:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;23122:35;;;;;;;23052:20;;23122:35;;;;;;;;;;;;;22634:530;;;:::o;8448:187::-;8534:7;8569:12;8561:6;;;;8553:29;;;;-1:-1:-1;;;8553:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8604:5:0;;;8448:187::o;7576:176::-;7634:7;7665:5;;;7688:6;;;;7680:46;;;;;-1:-1:-1;;;7680:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7744:1;7576:176;-1:-1:-1;;;7576:176:0:o;26296: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"
            }
          }
        },
        "IBasicFDT": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsDistributed",
                  "type": "uint256"
                }
              ],
              "name": "FundsDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsWithdrawn",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "totalWithdrawn",
                  "type": "uint256"
                }
              ],
              "name": "FundsWithdrawn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "PointsCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "PointsPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "withdrawFunds",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawableFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawnFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "accumulativeFundsOf(address)": "4e97415f",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IERC20": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          }
        },
        "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"
            }
          }
        },
        "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"
            }
          }
        },
        "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"
            }
          }
        },
        "SafeERC20": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122091a5430afb21e888a1a5d0824136c99a6d6293de6a78f2129b12b1c9023154f364736f6c634300060b0033",
              "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 SWAP2 0xA5 NUMBER EXP 0xFB 0x21 0xE8 DUP9 LOG1 0xA5 0xD0 DUP3 COINBASE CALLDATASIZE 0xC9 SWAP11 PUSH14 0x6293DE6A78F2129B12B1C9023154 RETURN PUSH5 0x736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "98891:3104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122091a5430afb21e888a1a5d0824136c99a6d6293de6a78f2129b12b1c9023154f364736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 0xA5 NUMBER EXP 0xFB 0x21 0xE8 DUP9 LOG1 0xA5 0xD0 DUP3 COINBASE CALLDATASIZE 0xC9 SWAP11 PUSH14 0x6293DE6A78F2129B12B1C9023154 RETURN PUSH5 0x736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "98891:3104:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SafeMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208cbf65c03fab268071e42820fd3864bcc35ca780136c1a71b041e59d6e86471064736f6c634300060b0033",
              "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 DUP13 0xBF PUSH6 0xC03FAB268071 0xE4 0x28 KECCAK256 REVERT CODESIZE PUSH5 0xBCC35CA780 SGT PUSH13 0x1A71B041E59D6E86471064736F PUSH13 0x634300060B0033000000000000 ",
              "sourceMap": "7324:4578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208cbf65c03fab268071e42820fd3864bcc35ca780136c1a71b041e59d6e86471064736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP13 0xBF PUSH6 0xC03FAB268071 0xE4 0x28 KECCAK256 REVERT CODESIZE PUSH5 0xBCC35CA780 SGT PUSH13 0x1A71B041E59D6E86471064736F PUSH13 0x634300060B0033000000000000 ",
              "sourceMap": "7324:4578:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SafeMathInt": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d35c58bbb0a55b79640f15be4767cd7165d10cae7be9ede077a03f70fdef532f64736f6c634300060b0033",
              "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 0xD3 0x5C PC 0xBB 0xB0 0xA5 JUMPDEST PUSH26 0x640F15BE4767CD7165D10CAE7BE9EDE077A03F70FDEF532F6473 PUSH16 0x6C634300060B00330000000000000000 ",
              "sourceMap": "6244:165:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d35c58bbb0a55b79640f15be4767cd7165d10cae7be9ede077a03f70fdef532f64736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0x5C PC 0xBB 0xB0 0xA5 JUMPDEST PUSH26 0x640F15BE4767CD7165D10CAE7BE9EDE077A03F70FDEF532F6473 PUSH16 0x6C634300060B00330000000000000000 ",
              "sourceMap": "6244:165:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SafeMathUint": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208fcc92b9a037c9b78a09182fbd8d1d0d171ae4fc39f3486d86d9f16cfdc4ff5664736f6c634300060b0033",
              "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 DUP16 0xCC SWAP3 0xB9 LOG0 CALLDATACOPY 0xC9 0xB7 DUP11 MULMOD XOR 0x2F 0xBD DUP14 SAR 0xD OR BYTE 0xE4 0xFC CODECOPY RETURN 0x48 PUSH14 0x86D9F16CFDC4FF5664736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "6494:163:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208fcc92b9a037c9b78a09182fbd8d1d0d171ae4fc39f3486d86d9f16cfdc4ff5664736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 0xCC SWAP3 0xB9 LOG0 CALLDATACOPY 0xC9 0xB7 DUP11 MULMOD XOR 0x2F 0xBD DUP14 SAR 0xD OR BYTE 0xE4 0xFC CODECOPY RETURN 0x48 PUSH14 0x86D9F16CFDC4FF5664736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "6494:163:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SignedSafeMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a8fcba352216e4623622c825c34aea8f6b3bfc5e77b33a827a721c0f26bd906264736f6c634300060b0033",
              "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 0xA8 0xFC 0xBA CALLDATALOAD 0x22 AND 0xE4 PUSH3 0x3622C8 0x25 0xC3 0x4A 0xEA DUP16 PUSH12 0x3BFC5E77B33A827A721C0F26 0xBD SWAP1 PUSH3 0x64736F PUSH13 0x634300060B0033000000000000 ",
              "sourceMap": "12116:2495:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a8fcba352216e4623622c825c34aea8f6b3bfc5e77b33a827a721c0f26bd906264736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 0xFC 0xBA CALLDATALOAD 0x22 AND 0xE4 PUSH3 0x3622C8 0x25 0xC3 0x4A 0xEA DUP16 PUSH12 0x3BFC5E77B33A827A721C0F26 0xBD SWAP1 PUSH3 0x64736F PUSH13 0x634300060B0033000000000000 ",
              "sourceMap": "12116:2495:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "StakeLocker": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_stakeAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Paused",
              "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": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Unpaused",
              "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": "",
                  "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": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "custodyAllowance",
              "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": [],
              "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": "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": "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": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "paused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "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": "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": "",
                  "type": "address"
                }
              ],
              "name": "stakeDate",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "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": [],
              "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": "",
                  "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": "6101006040523480156200001257600080fd5b50604051620040fb380380620040fb833981810160405260608110156200003857600080fd5b50805160208083015160409384015184518086018652601181527026b0b836329029ba30b5b2a637b1b5b2b960791b818501908152865180880190975260088752674d504c5354414b4560c01b9487019490945280519495929491939092918591849184918391839183918391620000b4916003919062000124565b508051620000ca90600490602084019062000124565b50506005805460ff199081166012179091556001600160601b0319606097881b8116608052600f805490921690915599861b8a1660c052505050505094851b841660a052505090911b1660e05262ed4e00601055620001c9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200016757805160ff191683800117855562000197565b8280016001018555821562000197579182015b82811115620001975782518255916020019190600101906200017a565b50620001a5929150620001a9565b5090565b620001c691905b80821115620001a55760008155600101620001b0565b90565b60805160601c60a05160601c60c05160601c60e05160601c613e9b62000260600039806109cd5280610fcb5280611bac5280611d5552806120915280612167528061281a52806128ce5280612cf55280612e1c525080610a005250806112915280611316528061164f52806119725280611a395280611dbf525080610adc5280610b2b52806115ea52806126185250613e9b6000f3fe608060405234801561001057600080fd5b50600436106102d55760003560e01c806370a0823111610182578063af6d5571116100e9578063d63a8e11116100a2578063f2d5d56b1161007c578063f2d5d56b14610839578063fab1107814610865578063fec984e314610882578063ff8871301461088a576102d5565b8063d63a8e11146107dd578063dd62ed3e14610803578063ee947a7c14610831576102d5565b8063af6d557114610719578063b12527f81461073f578063bcd01be71461076d578063c771c3901461078a578063c965b548146107a7578063cc0fef02146107d5576102d5565b8063a457c2d71161013b578063a457c2d71461066e578063a694fc3a1461069a578063a9059cbb146106b7578063a9691f3f146106e3578063aed4966a146106eb578063aedc78c314610711576102d5565b806370a082311461060257806380cd916d146106285780638456cb591461063057806386bf1da3146106385780638a10555c1461065e57806395d89b4114610666576102d5565b80632e17de781161024157806346c162de116101fa5780635190bbaf116101d45780635190bbaf146105a65780635c975abb146105cc57806363f04b15146105d457806366967791146105dc576102d5565b806346c162de146105705780634ab17969146105785780634e97415f14610580576102d5565b80632e17de78146104b5578063313ce567146104d257806339509351146104f05780633f4ba83a1461051c57806340bde09814610524578063443bb2931461054a576102d5565b80631831ccf2116102935780631831ccf214610405578063209b2bca1461040d57806323b872dd1461041557806324600fc31461044b57806327f91856146104535780632ac04ac81461047f576102d5565b806241c52c146102da57806306fdde0314610312578063095ea7b31461038f5780630e754e86146103cf57806316f0115b146103d957806318160ddd146103fd575b600080fd5b610300600480360360208110156102f057600080fd5b50356001600160a01b03166108b0565b60408051918252519081900360200190f35b61031a6108cf565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561035457818101518382015260200161033c565b50505050905090810190601f1680156103815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103bb600480360360408110156103a557600080fd5b506001600160a01b038135169060200135610965565b604080519115158252519081900360200190f35b6103d7610983565b005b6103e16109cb565b604080516001600160a01b039092168252519081900360200190f35b6103006109ef565b6103bb6109f5565b6103e16109fe565b6103bb6004803603606081101561042b57600080fd5b506001600160a01b03813581169160208101359091169060400135610a22565b6103d7610ab0565b6103d76004803603604081101561046957600080fd5b506001600160a01b038135169060200135610be0565b6103d76004803603606081101561049557600080fd5b506001600160a01b03813581169160208101359091169060400135610dcd565b6103d7600480360360208110156104cb57600080fd5b5035610fc6565b6104da6113c3565b6040805160ff9092168252519081900360200190f35b6103bb6004803603604081101561050657600080fd5b506001600160a01b0381351690602001356113cc565b6103d7611420565b6103006004803603602081101561053a57600080fd5b50356001600160a01b0316611430565b6103006004803603602081101561056057600080fd5b50356001600160a01b0316611499565b6103d76114bf565b6103d76114ed565b6103006004803603602081101561059657600080fd5b50356001600160a01b0316611588565b610300600480360360208110156105bc57600080fd5b50356001600160a01b03166115cd565b6103bb6115df565b6103e16115e8565b610300600480360360208110156105f257600080fd5b50356001600160a01b031661160c565b6103006004803603602081101561061857600080fd5b50356001600160a01b0316611632565b6103e161164d565b6103d7611671565b6103bb6004803603602081101561064e57600080fd5b50356001600160a01b0316611681565b6103d7611785565b61031a611820565b6103bb6004803603604081101561068457600080fd5b506001600160a01b038135169060200135611881565b6103d7600480360360208110156106b057600080fd5b50356118ef565b6103bb600480360360408110156106cd57600080fd5b506001600160a01b038135169060200135611ae4565b610300611af8565b6103006004803603602081101561070157600080fd5b50356001600160a01b0316611afe565b610300611b19565b6103006004803603602081101561072f57600080fd5b50356001600160a01b0316611b1f565b6103d76004803603604081101561075557600080fd5b506001600160a01b0381351690602001351515611b31565b6103d76004803603602081101561078357600080fd5b5035611ba1565b6103d7600480360360208110156107a057600080fd5b5035611c27565b610300600480360360408110156107bd57600080fd5b506001600160a01b0381358116916020013516611cbc565b6103d7611cd9565b6103bb600480360360208110156107f357600080fd5b50356001600160a01b0316611d04565b6103006004803603604081101561081957600080fd5b506001600160a01b0381358116916020013516611d19565b610300611d44565b6103d76004803603604081101561084f57600080fd5b506001600160a01b038135169060200135611d4a565b6103bb6004803603602081101561087b57600080fd5b5035611dec565b610300611ed7565b610300600480360360208110156108a057600080fd5b50356001600160a01b0316611edd565b6001600160a01b0381166000908152600860205260409020545b919050565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561095b5780601f106109305761010080835404028352916020019161095b565b820191906000526020600020905b81548152906001019060200180831161093e57829003601f168201915b5050505050905090565b6000610979610972611eef565b8484611ef3565b5060015b92915050565b61098b611fdf565b61099361208f565b6016805460ff191660011790556040517fd33782a61f25b663946a975c2c1799d6e6d2dc636024b8980789f9e9671abb7890600090a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b60165460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610a2f848484612162565b610aa584610a3b611eef565b610aa085604051806060016040528060288152602001613d61602891396001600160a01b038a16600090815260016020526040812090610a79611eef565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61247e16565b611ef3565b5060015b9392505050565b610ab8611fdf565b6000610ac2612515565b905080610acf5750610bde565b610b096001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338363ffffffff61259a16565b604080516370a0823160e01b8152306004820181905291516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692917f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a29184916370a08231916024808301926020929190829003018186803b158015610b9657600080fd5b505afa158015610baa573d6000803e3d6000fd5b505050506040513d6020811015610bc057600080fd5b505160408051918252519081900360200190a3610bdb6125f1565b50505b565b3360009081526014602090815260408083206001600160a01b038616845290915281205490610c15828463ffffffff6126a616565b3360009081526015602052604081205491925090610c39908563ffffffff6126a616565b90506001600160a01b038516610c8d576040805162461bcd60e51b815260206004820152601460248201527329a61d24a72b20a624a22fa1aaa9aa27a224a0a760611b604482015290519081900360640190fd5b83610cd0576040805162461bcd60e51b815260206004820152600e60248201526d14d30e9253959053125117d0535560921b604482015290519081900360640190fd5b610cd933611632565b811115610d20576040805162461bcd60e51b815260206004820152601060248201526f534c3a494e5355465f42414c414e434560801b604482015290519081900360640190fd5b3360008181526014602090815260408083206001600160a01b038a168085529083528184208790558484526015835292819020859055805187815291820186905280519293927f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e89281900390910190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a25050505050565b6001600160a01b038316600090815260146020908152604080832033845290915281205490610e02828463ffffffff61270016565b9050846001600160a01b0316846001600160a01b031614610e60576040805162461bcd60e51b815260206004820152601360248201527229a61d24a72b20a624a22fa922a1a2a4ab22a960691b604482015290519081900360640190fd5b82610ea3576040805162461bcd60e51b815260206004820152600e60248201526d14d30e9253959053125117d0535560921b604482015290519081900360640190fd5b6001600160a01b038516600081815260146020908152604080832033845282528083208590559282526015905290812054610ee4908563ffffffff61270016565b6001600160a01b038088166000818152601560209081526040918290208590558151898152915194955092891693919233927ffaa022ea2cd7f14157070896fabadafe96cc4d4714eef7ae6a992a5084493ed59281900390910190a46040805184815260208101849052815133926001600160a01b038a16927f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e8929081900390910190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a2505050505050565b3360007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b0316634f85221a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561102557600080fd5b505afa158015611039573d6000803e3d6000fd5b505050506040513d602081101561104f57600080fd5b505115806110cd5750806001600160a01b0316634046af2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561109157600080fd5b505afa1580156110a5573d6000803e3d6000fd5b505050506040513d60208110156110bb57600080fd5b50516001600160a01b03838116911614155b611110576040805162461bcd60e51b815260206004820152600f60248201526e14d30e94d51052d157d313d0d2d151608a1b604482015290519081900360640190fd5b611118611fdf565b336000818152601560205260409020549061114490859061113890611632565b9063ffffffff61270016565b1015611197576040805162461bcd60e51b815260206004820152601860248201527f534c3a494e5355465f554e5354414b4541424c455f42414c0000000000000000604482015290519081900360640190fd5b6111a033611681565b6111e7576040805162461bcd60e51b815260206004820152601360248201527229a61d27aaaa29a4a222afa1a7a7a62227aba760691b604482015290519081900360640190fd5b60105433600090815260116020526040902054429161120c919063ffffffff6126a616565b1115611251576040805162461bcd60e51b815260206004820152600f60248201526e14d30e9195539114d7d313d0d2d151608a1b604482015290519081900360640190fd5b6112596114bf565b6112633384612742565b61126b610ab0565b6112be3361128761127a6127e9565b869063ffffffff61270016565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919063ffffffff61259a16565b60408051848152905133917f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd919081900360200190a2604080516370a0823160e01b8152306004820181905291516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692917f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a29184916370a08231916024808301926020929190829003018186803b15801561138157600080fd5b505afa158015611395573d6000803e3d6000fd5b505050506040513d60208110156113ab57600080fd5b505160408051918252519081900360200190a3505050565b60055460ff1690565b60006109796113d9611eef565b84610aa085600160006113ea611eef565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6126a616565b611428612818565b610bde612992565b6001600160a01b0381166000908152600a6020526040812054600160801b9061148b906114869061147a61147561146688611632565b6009549063ffffffff612a3016565b612a89565b9063ffffffff612aca16565b612b2f565b8161149257fe5b0492915050565b6001600160a01b03811660009081526008602052604081205461097d9061113884611588565b60006114c96125f1565b9050600081136114d95750610bde565b6114ea6114e582612b2f565b612b70565b50565b33600090815260126020526040902054611541576040805162461bcd60e51b815260206004820152601060248201526f534c3a4e4f545f554e5354414b494e4760801b604482015290519081900360640190fd5b3360008181526012602090815260408083208390558051928352517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b6001600160a01b038116600090815260076020526040812054600160801b9061148b906114869061147a6114756115be88611632565b6006549063ffffffff612a3016565b60116020526000908152604090205481565b600f5460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152600b602052604081205461097d9061113884611430565b6001600160a01b031660009081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b611679612818565b610bde612c70565b60008061168c612cf1565b9050806001600160a01b0316632018b8706040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c757600080fd5b505afa1580156116db573d6000803e3d6000fd5b505050506040513d60208110156116f157600080fd5b50516040805163a965d6b560e01b815290516001600160a01b0384169163a965d6b5916004808301926020929190829003018186803b15801561173357600080fd5b505afa158015611747573d6000803e3d6000fd5b505050506040513d602081101561175d57600080fd5b50516001600160a01b0385166000908152601260205260409020540142031115915050919050565b600061179033611632565b14156117d5576040805162461bcd60e51b815260206004820152600f60248201526e534c3a5a45524f5f42414c414e434560881b604482015290519081900360640190fd5b336000818152601260209081526040918290204290819055825190815291517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561095b5780601f106109305761010080835404028352916020019161095b565b600061097961188e611eef565b84610aa085604051806060016040528060258152602001613e4160259139600160006118b8611eef565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61247e16565b600f5460ff161561193a576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b611942611fdf565b61194b33612deb565b336000818152601260205260408120556119659082612ef0565b6119a06001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308463ffffffff612fc516565b6119aa3382613025565b60408051828152905133917febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a919081900360200190a26040805160008152905133917f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d65919081900360200190a2604080516370a0823160e01b8152306004820181905291516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692917f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a29184916370a08231916024808301926020929190829003018186803b158015611aa457600080fd5b505afa158015611ab8573d6000803e3d6000fd5b505050506040513d6020811015611ace57600080fd5b505160408051918252519081900360200190a350565b6000610979611af1611eef565b8484612162565b600e5481565b6001600160a01b03166000908152600b602052604090205490565b600c5481565b60156020526000908152604090205481565b611b39611fdf565b611b4161208f565b6001600160a01b038216600081815260136020908152604091829020805460ff1916851515908117909155825190815291517f73121574a4eadb4cfdeb2ba56a6a88067b03edd1f0a0dfcac0a5a95682a243679281900390910190a25050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c09576040805162461bcd60e51b81526020600482015260086024820152670534c3a4e4f545f560c41b604482015290519081900360640190fd5b600c54611c1c908263ffffffff6126a616565b600c556114ea611cd9565b611c2f611fdf565b611c3761208f565b601054811115611c81576040805162461bcd60e51b815260206004820152601060248201526f534c3a494e56414c49445f56414c554560801b604482015290519081900360640190fd5b60108190556040805182815290517fcc67306c5d19f79a73208a1270ca19eb367b4bd5258eac096e974365d18e432c9181900360200190a150565b601460209081526000928352604080842090915290825290205481565b6000611ce3613071565b905060008113611cf35750610bde565b6114ea611cff82612b2f565b61308f565b60136020526000908152604090205460ff1681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60105481565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611db2576040805162461bcd60e51b81526020600482015260086024820152670534c3a4e4f545f560c41b604482015290519081900360640190fd5b610bdb6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838363ffffffff61259a16565b600080611df7612cf1565b9050806001600160a01b0316632018b8706040518163ffffffff1660e01b815260040160206040518083038186803b158015611e3257600080fd5b505afa158015611e46573d6000803e3d6000fd5b505050506040513d6020811015611e5c57600080fd5b50516040805163a965d6b560e01b815290516001600160a01b0384169163a965d6b5916004808301926020929190829003018186803b158015611e9e57600080fd5b505afa158015611eb2573d6000803e3d6000fd5b505050506040513d6020811015611ec857600080fd5b50518401014211915050919050565b600d5481565b60126020526000908152604090205481565b3390565b6001600160a01b038316611f385760405162461bcd60e51b8152600401808060200182810382526024815260200180613dcf6024913960400191505060405180910390fd5b6001600160a01b038216611f7d5760405162461bcd60e51b8152600401808060200182810382526022815260200180613cb16022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b611fe7612cf1565b6001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b15801561201f57600080fd5b505afa158015612033573d6000803e3d6000fd5b505050506040513d602081101561204957600080fd5b505115610bde576040805162461bcd60e51b815260206004820152600f60248201526e14d30e941493d513d7d4105554d151608a1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634046af2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120e857600080fd5b505afa1580156120fc573d6000803e3d6000fd5b505050506040513d602081101561211257600080fd5b50516001600160a01b03163314610bde576040805162461bcd60e51b815260206004820152600f60248201526e534c3a4e4f545f44454c454741544560881b604482015290519081900360640190fd5b8260007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b0316634f85221a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c157600080fd5b505afa1580156121d5573d6000803e3d6000fd5b505050506040513d60208110156121eb57600080fd5b505115806122695750806001600160a01b0316634046af2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561222d57600080fd5b505afa158015612241573d6000803e3d6000fd5b505050506040513d602081101561225757600080fd5b50516001600160a01b03838116911614155b6122ac576040805162461bcd60e51b815260206004820152600f60248201526e14d30e94d51052d157d313d0d2d151608a1b604482015290519081900360640190fd5b6122b4611fdf565b6010546001600160a01b03861660009081526011602052604090205442916122e2919063ffffffff6126a616565b1115612327576040805162461bcd60e51b815260206004820152600f60248201526e14d30e9195539114d7d313d0d2d151608a1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205461234d8461113888611632565b10156123a0576040805162461bcd60e51b815260206004820152601960248201527f534c3a494e5355465f5452414e5346455241424c455f42414c00000000000000604482015290519081900360640190fd5b6001600160a01b0384166000908152601260205260409020546123c290611dec565b612413576040805162461bcd60e51b815260206004820152601860248201527f534c3a524543495049454e545f4e4f545f414c4c4f5745440000000000000000604482015290519081900360640190fd5b600061241e8661160c565b14612462576040805162461bcd60e51b815260206004820152600f60248201526e534c3a5245434f475f4c4f5353455360881b604482015290519081900360640190fd5b61246c8484612ef0565b612477858585613194565b5050505050565b6000818484111561250d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124d25781810151838201526020016124ba565b50505050905090810190601f1680156124ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061252033611499565b3360009081526008602052604081205491925090612544908363ffffffff6126a616565b336000818152600860209081526040918290208490558151868152908101849052815193945091927ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49281900390910190a25090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526125ec9084906132c0565b505050565b600e54604080516370a0823160e01b81523060048201529051600092916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561265f57600080fd5b505afa158015612673573d6000803e3d6000fd5b505050506040513d602081101561268957600080fd5b5051600e8190556126a0908263ffffffff61337116565b91505090565b600082820183811015610aa9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610aa983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061247e565b61274c82826133d6565b600061278e61276961147584600954612a3090919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff612aca16565b6001600160a01b0384166000818152600a60209081526040918290208490558151848152915193945091927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a2505050565b60006127f361347d565b600c54909150612809908263ffffffff61270016565b600c55612814613071565b5090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634046af2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561287157600080fd5b505afa158015612885573d6000803e3d6000fd5b505050506040513d602081101561289b57600080fd5b50516001600160a01b0316331480612941575060408051633099c27960e11b815233600482015290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163613384f2916024808301926020929190829003018186803b15801561291457600080fd5b505afa158015612928573d6000803e3d6000fd5b505050506040513d602081101561293e57600080fd5b50515b610bde576040805162461bcd60e51b815260206004820152601860248201527f534c3a4e4f545f44454c45474154455f4f525f41444d494e0000000000000000604482015290519081900360640190fd5b600f5460ff166129e0576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b600f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612a13611eef565b604080516001600160a01b039092168252519081900360200190a1565b600082612a3f5750600061097d565b82820282848281612a4c57fe5b0414610aa95760405162461bcd60e51b8152600401808060200182810382526021815260200180613d406021913960400191505060405180910390fd5b8060008112156108ca576040805162461bcd60e51b815260206004820152600760248201526629a6aa9d27a7a160c91b604482015290519081900360640190fd5b6000828201818312801590612adf5750838112155b80612af45750600083128015612af457508381125b610aa95760405162461bcd60e51b8152600401808060200182810382526021815260200180613cf96021913960400191505060405180910390fd5b600080821215612814576040805162461bcd60e51b8152602060048201526007602482015266534d493a4e454760c81b604482015290519081900360640190fd5b6000612b7a6109ef565b11612bbe576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b80612bc8576114ea565b612bff612bd36109ef565b612be783600160801b63ffffffff612a3016565b81612bee57fe5b60065491900463ffffffff6126a616565b60065560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a260065460408051918252517f1f8d7705f31c3337a080803a8ad7e71946fb88d84738879be2bf402f97156e969181900360200190a150565b600f5460ff1615612cbb576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a13611eef565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630d49b38c6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4c57600080fd5b505afa158015612d60573d6000803e3d6000fd5b505050506040513d6020811015612d7657600080fd5b50516040805163c312452560e01b815290516001600160a01b039092169163c312452591600480820192602092909190829003018186803b158015612dba57600080fd5b505afa158015612dce573d6000803e3d6000fd5b505050506040513d6020811015612de457600080fd5b5051905090565b60165460ff1680612e1457506001600160a01b03811660009081526013602052604090205460ff165b80612eae57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634046af2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e7357600080fd5b505afa158015612e87573d6000803e3d6000fd5b505050506040513d6020811015612e9d57600080fd5b50516001600160a01b038281169116145b6114ea576040805162461bcd60e51b815260206004820152600e60248201526d14d30e9393d517d0531313d5d15160921b604482015290519081900360640190fd5b6001600160a01b03821660009081526011602052604081205490612f1384611632565b905060008084830111612f265782612f68565b612f68612f5b838601612f4f87612f43428963ffffffff61270016565b9063ffffffff612a3016565b9063ffffffff61350216565b849063ffffffff6126a616565b6001600160a01b0386166000818152601160209081526040918290208490558151848152915193945091927f09686619568b9bd7c4faea3ba0efbeab967ec977167b97405ad208f1a9ccea69929181900390910190a25050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261301f9085906132c0565b50505050565b61302f8282613544565b600061278e61304c61147584600954612a3090919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff61337116565b600d8054600c54918290556000916126a0908263ffffffff61337116565b60006130996109ef565b116130dd576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b806130e7576114ea565b60006131206130f46109ef565b61310884600160801b63ffffffff612a3016565b8161310f57fe5b60095491900463ffffffff6126a616565b600981905560408051848152905191925033917ff88156a8032a0d2c65df18fafaf84e0bea647b3d94a0f7fc6ab14c97dec2bf749181900360200190a26040805182815290517f240ce2b5ce9e9e5a70010c7f8034c233d89b7ce2d60f3a38d9bc3ca01a36f88c9181900360200190a15050565b61319f838383613590565b60006131b961147583600954612a3090919063ffffffff16565b6001600160a01b0385166000908152600a6020526040812054919250906131e6908363ffffffff612aca16565b6001600160a01b038087166000908152600a602052604080822084905591871681529081205491925090613220908463ffffffff61337116565b6001600160a01b038087166000908152600a602090815260409182902084905581518681529151939450918916927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a26040805182815290516001600160a01b038716917fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3919081900360200190a2505050505050565b6060613315826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136bc9092919063ffffffff16565b8051909150156125ec5780806020019051602081101561333457600080fd5b50516125ec5760405162461bcd60e51b815260040180806020018281038252602a815260200180613e17602a913960400191505060405180910390fd5b60008183038183128015906133865750838113155b8061339b575060008312801561339b57508381135b610aa95760405162461bcd60e51b8152600401808060200182810382526024815260200180613df36024913960400191505060405180910390fd5b6133e082826136d3565b60006134226133fd61147584600654612a3090919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff612aca16565b6001600160a01b0384166000818152600760209081526040918290208490558151848152915193945091927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a2505050565b60006134883361160c565b336000908152600b6020526040812054919250906134ac908363ffffffff6126a616565b336000818152600b60209081526040918290208490558151868152908101849052815193945091927f814eba35782909dbbaeefb8104073dfca45de43173f7077970c1584b3cf918b59281900390910190a25090565b6000610aa983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137db565b61354e8282613840565b600061342261356b61147584600654612a3090919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff61337116565b61359b83838361393c565b60006135b561147583600654612a3090919063ffffffff16565b6001600160a01b038516600090815260076020526040812054919250906135e2908363ffffffff612aca16565b6001600160a01b038087166000908152600760205260408082208490559187168152908120549192509061361c908463ffffffff61337116565b6001600160a01b0380871660009081526007602090815260409182902084905581518681529151939450918916927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a26040805182815290516001600160a01b038716917ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773919081900360200190a2505050505050565b60606136cb8484600085613aa3565b949350505050565b6001600160a01b0382166137185760405162461bcd60e51b8152600401808060200182810382526021815260200180613d896021913960400191505060405180910390fd5b613724826000836125ec565b61376781604051806060016040528060228152602001613c8f602291396001600160a01b038516600090815260208190526040902054919063ffffffff61247e16565b6001600160a01b038316600090815260208190526040902055600254613793908263ffffffff61270016565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000818361382a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156124d25781810151838201526020016124ba565b50600083858161383657fe5b0495945050505050565b6001600160a01b03821661389b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6138a7600083836125ec565b6002546138ba908263ffffffff6126a616565b6002556001600160a01b0382166000908152602081905260409020546138e6908263ffffffff6126a616565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0383166139815760405162461bcd60e51b8152600401808060200182810382526025815260200180613daa6025913960400191505060405180910390fd5b6001600160a01b0382166139c65760405162461bcd60e51b8152600401808060200182810382526023815260200180613c6c6023913960400191505060405180910390fd5b6139d18383836125ec565b613a1481604051806060016040528060268152602001613cd3602691396001600160a01b038616600090815260208190526040902054919063ffffffff61247e16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613a49908263ffffffff6126a616565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b606082471015613ae45760405162461bcd60e51b8152600401808060200182810382526026815260200180613d1a6026913960400191505060405180910390fd5b613aed85613bff565b613b3e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310613b7d5780518252601f199092019160209182019101613b5e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613bdf576040519150601f19603f3d011682016040523d82523d6000602084013e613be4565b606091505b5091509150613bf4828286613c05565b979650505050505050565b3b151590565b60608315613c14575081610aa9565b825115613c245782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156124d25781810151838201526020016124ba56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220babe721907316288dc4ff4232212e6e975be97388ec1b3bbf5597d79e0ffe1f164736f6c634300060b0033",
              "opcodes": "PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x40FB CODESIZE SUB DUP1 PUSH3 0x40FB DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x11 DUP2 MSTORE PUSH17 0x26B0B836329029BA30B5B2A637B1B5B2B9 PUSH1 0x79 SHL DUP2 DUP6 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD DUP1 DUP9 ADD SWAP1 SWAP8 MSTORE PUSH1 0x8 DUP8 MSTORE PUSH8 0x4D504C5354414B45 PUSH1 0xC0 SHL SWAP5 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP1 MLOAD SWAP5 SWAP6 SWAP3 SWAP5 SWAP2 SWAP4 SWAP1 SWAP3 SWAP2 DUP6 SWAP2 DUP5 SWAP2 DUP5 SWAP2 DUP4 SWAP2 DUP4 SWAP2 DUP4 SWAP2 DUP4 SWAP2 PUSH3 0xB4 SWAP2 PUSH1 0x3 SWAP2 SWAP1 PUSH3 0x124 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0xCA SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x124 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT SWAP1 DUP2 AND PUSH1 0x12 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP8 DUP9 SHL DUP2 AND PUSH1 0x80 MSTORE PUSH1 0xF DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE SWAP10 DUP7 SHL DUP11 AND PUSH1 0xC0 MSTORE POP POP POP POP POP SWAP5 DUP6 SHL DUP5 AND PUSH1 0xA0 MSTORE POP POP SWAP1 SWAP2 SHL AND PUSH1 0xE0 MSTORE PUSH3 0xED4E00 PUSH1 0x10 SSTORE PUSH3 0x1C9 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 0x167 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x197 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x197 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x197 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x17A JUMP JUMPDEST POP PUSH3 0x1A5 SWAP3 SWAP2 POP PUSH3 0x1A9 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x1C6 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1A5 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1B0 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 0x3E9B PUSH3 0x260 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x9CD MSTORE DUP1 PUSH2 0xFCB MSTORE DUP1 PUSH2 0x1BAC MSTORE DUP1 PUSH2 0x1D55 MSTORE DUP1 PUSH2 0x2091 MSTORE DUP1 PUSH2 0x2167 MSTORE DUP1 PUSH2 0x281A MSTORE DUP1 PUSH2 0x28CE MSTORE DUP1 PUSH2 0x2CF5 MSTORE DUP1 PUSH2 0x2E1C MSTORE POP DUP1 PUSH2 0xA00 MSTORE POP DUP1 PUSH2 0x1291 MSTORE DUP1 PUSH2 0x1316 MSTORE DUP1 PUSH2 0x164F MSTORE DUP1 PUSH2 0x1972 MSTORE DUP1 PUSH2 0x1A39 MSTORE DUP1 PUSH2 0x1DBF MSTORE POP DUP1 PUSH2 0xADC MSTORE DUP1 PUSH2 0xB2B MSTORE DUP1 PUSH2 0x15EA MSTORE DUP1 PUSH2 0x2618 MSTORE POP PUSH2 0x3E9B 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 0x2D5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x182 JUMPI DUP1 PUSH4 0xAF6D5571 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xD63A8E11 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xF2D5D56B GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xF2D5D56B EQ PUSH2 0x839 JUMPI DUP1 PUSH4 0xFAB11078 EQ PUSH2 0x865 JUMPI DUP1 PUSH4 0xFEC984E3 EQ PUSH2 0x882 JUMPI DUP1 PUSH4 0xFF887130 EQ PUSH2 0x88A JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0xD63A8E11 EQ PUSH2 0x7DD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x803 JUMPI DUP1 PUSH4 0xEE947A7C EQ PUSH2 0x831 JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0xAF6D5571 EQ PUSH2 0x719 JUMPI DUP1 PUSH4 0xB12527F8 EQ PUSH2 0x73F JUMPI DUP1 PUSH4 0xBCD01BE7 EQ PUSH2 0x76D JUMPI DUP1 PUSH4 0xC771C390 EQ PUSH2 0x78A JUMPI DUP1 PUSH4 0xC965B548 EQ PUSH2 0x7A7 JUMPI DUP1 PUSH4 0xCC0FEF02 EQ PUSH2 0x7D5 JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x13B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0xA694FC3A EQ PUSH2 0x69A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x6B7 JUMPI DUP1 PUSH4 0xA9691F3F EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0xAED4966A EQ PUSH2 0x6EB JUMPI DUP1 PUSH4 0xAEDC78C3 EQ PUSH2 0x711 JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x602 JUMPI DUP1 PUSH4 0x80CD916D EQ PUSH2 0x628 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x630 JUMPI DUP1 PUSH4 0x86BF1DA3 EQ PUSH2 0x638 JUMPI DUP1 PUSH4 0x8A10555C EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x666 JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0x2E17DE78 GT PUSH2 0x241 JUMPI DUP1 PUSH4 0x46C162DE GT PUSH2 0x1FA JUMPI DUP1 PUSH4 0x5190BBAF GT PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x5190BBAF EQ PUSH2 0x5A6 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x5CC JUMPI DUP1 PUSH4 0x63F04B15 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0x66967791 EQ PUSH2 0x5DC JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0x46C162DE EQ PUSH2 0x570 JUMPI DUP1 PUSH4 0x4AB17969 EQ PUSH2 0x578 JUMPI DUP1 PUSH4 0x4E97415F EQ PUSH2 0x580 JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0x2E17DE78 EQ PUSH2 0x4B5 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x4F0 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x51C JUMPI DUP1 PUSH4 0x40BDE098 EQ PUSH2 0x524 JUMPI DUP1 PUSH4 0x443BB293 EQ PUSH2 0x54A JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 GT PUSH2 0x293 JUMPI DUP1 PUSH4 0x1831CCF2 EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0x209B2BCA EQ PUSH2 0x40D JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x415 JUMPI DUP1 PUSH4 0x24600FC3 EQ PUSH2 0x44B JUMPI DUP1 PUSH4 0x27F91856 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0x2AC04AC8 EQ PUSH2 0x47F JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH3 0x41C52C EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x312 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x38F JUMPI DUP1 PUSH4 0xE754E86 EQ PUSH2 0x3CF JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x3D9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3FD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x31A PUSH2 0x8CF 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 0x354 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x33C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x381 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 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x965 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x3D7 PUSH2 0x983 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3E1 PUSH2 0x9CB 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 0x300 PUSH2 0x9EF JUMP JUMPDEST PUSH2 0x3BB PUSH2 0x9F5 JUMP JUMPDEST PUSH2 0x3E1 PUSH2 0x9FE JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x42B 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 0xA22 JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0xAB0 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBE0 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x495 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 0xDCD JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xFC6 JUMP JUMPDEST PUSH2 0x4DA PUSH2 0x13C3 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 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x13CC JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x1420 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1430 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x560 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1499 JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x14BF JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x14ED JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1588 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x3BB PUSH2 0x15DF JUMP JUMPDEST PUSH2 0x3E1 PUSH2 0x15E8 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x160C JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1632 JUMP JUMPDEST PUSH2 0x3E1 PUSH2 0x164D JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x1671 JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x64E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1681 JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x1785 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x1820 JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1881 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x18EF JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1AE4 JUMP JUMPDEST PUSH2 0x300 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x701 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1AFE JUMP JUMPDEST PUSH2 0x300 PUSH2 0x1B19 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B1F JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x755 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 0x1B31 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x783 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1BA1 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C27 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7BD 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 0x1CBC JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x1CD9 JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D04 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x819 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 0x1D19 JUMP JUMPDEST PUSH2 0x300 PUSH2 0x1D44 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x84F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1D4A JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x87B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1DEC JUMP JUMPDEST PUSH2 0x300 PUSH2 0x1ED7 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EDD 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 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 0x95B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x930 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x95B 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 0x93E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x979 PUSH2 0x972 PUSH2 0x1EEF JUMP JUMPDEST DUP5 DUP5 PUSH2 0x1EF3 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x98B PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0x993 PUSH2 0x208F JUMP JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xD33782A61F25B663946A975C2C1799D6E6D2DC636024B8980789F9E9671ABB78 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA2F DUP5 DUP5 DUP5 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0xAA5 DUP5 PUSH2 0xA3B PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0xAA0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3D61 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 0xA79 PUSH2 0x1EEF 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 0x247E AND JUMP JUMPDEST PUSH2 0x1EF3 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xAB8 PUSH2 0x1FDF JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAC2 PUSH2 0x2515 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0xACF JUMPI POP PUSH2 0xBDE JUMP JUMPDEST PUSH2 0xB09 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER DUP4 PUSH4 0xFFFFFFFF PUSH2 0x259A AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP3 SWAP2 PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 SWAP2 DUP5 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 0xB96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBAA 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 0xBC0 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 PUSH2 0xBDB PUSH2 0x25F1 JUMP JUMPDEST POP POP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 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 0xC15 DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0xC39 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0xC8D 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 0x29A61D24A72B20A624A22FA1AAA9AA27A224A0A7 PUSH1 0x61 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH2 0xCD0 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 0x14D30E9253959053125117D05355 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xCD9 CALLER PUSH2 0x1632 JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0xD20 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 0x534C3A494E5355465F42414C414E4345 PUSH1 0x80 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 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP8 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x15 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP1 MLOAD DUP8 DUP2 MSTORE SWAP2 DUP3 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 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 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0xE02 DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST SWAP1 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xE60 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 0x29A61D24A72B20A624A22FA922A1A2A4AB22A9 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH2 0xEA3 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 0x14D30E9253959053125117D05355 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 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x14 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 0x15 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0xEE4 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 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 CALLER PUSH1 0x0 PUSH32 0x0 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4F85221A 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 0x1025 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1039 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 0x104F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO DUP1 PUSH2 0x10CD JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4046AF2B 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 0x1091 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A5 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 0x10BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO JUMPDEST PUSH2 0x1110 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 0x14D30E94D51052D157D313D0D2D151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1118 PUSH2 0x1FDF JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x1144 SWAP1 DUP6 SWAP1 PUSH2 0x1138 SWAP1 PUSH2 0x1632 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST LT ISZERO PUSH2 0x1197 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x534C3A494E5355465F554E5354414B4541424C455F42414C0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x11A0 CALLER PUSH2 0x1681 JUMP JUMPDEST PUSH2 0x11E7 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 0x29A61D27AAAA29A4A222AFA1A7A7A62227ABA7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x10 SLOAD CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD TIMESTAMP SWAP2 PUSH2 0x120C SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST GT ISZERO PUSH2 0x1251 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 0x14D30E9195539114D7D313D0D2D151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1259 PUSH2 0x14BF JUMP JUMPDEST PUSH2 0x1263 CALLER DUP5 PUSH2 0x2742 JUMP JUMPDEST PUSH2 0x126B PUSH2 0xAB0 JUMP JUMPDEST PUSH2 0x12BE CALLER PUSH2 0x1287 PUSH2 0x127A PUSH2 0x27E9 JUMP JUMPDEST DUP7 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x259A AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x85082129D87B2FE11527CB1B3B7A520AEB5AA6913F88A3D8757FE40D1DB02FDD SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP3 SWAP2 PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 SWAP2 DUP5 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 0x1381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1395 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 0x13AB 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 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x979 PUSH2 0x13D9 PUSH2 0x1EEF JUMP JUMPDEST DUP5 PUSH2 0xAA0 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x13EA PUSH2 0x1EEF 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 0x26A6 AND JUMP JUMPDEST PUSH2 0x1428 PUSH2 0x2818 JUMP JUMPDEST PUSH2 0xBDE PUSH2 0x2992 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 0x148B SWAP1 PUSH2 0x1486 SWAP1 PUSH2 0x147A PUSH2 0x1475 PUSH2 0x1466 DUP9 PUSH2 0x1632 JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2A30 AND JUMP JUMPDEST PUSH2 0x2A89 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2ACA AND JUMP JUMPDEST PUSH2 0x2B2F JUMP JUMPDEST DUP2 PUSH2 0x1492 JUMPI INVALID JUMPDEST DIV SWAP3 SWAP2 POP 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 0x97D SWAP1 PUSH2 0x1138 DUP5 PUSH2 0x1588 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14C9 PUSH2 0x25F1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x14D9 JUMPI POP PUSH2 0xBDE JUMP JUMPDEST PUSH2 0x14EA PUSH2 0x14E5 DUP3 PUSH2 0x2B2F JUMP JUMPDEST PUSH2 0x2B70 JUMP JUMPDEST POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1541 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 0x534C3A4E4F545F554E5354414B494E47 PUSH1 0x80 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 0x12 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 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 0x148B SWAP1 PUSH2 0x1486 SWAP1 PUSH2 0x147A PUSH2 0x1475 PUSH2 0x15BE DUP9 PUSH2 0x1632 JUMP JUMPDEST PUSH1 0x6 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2A30 AND JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH32 0x0 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 0x97D SWAP1 PUSH2 0x1138 DUP5 PUSH2 0x1430 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 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1679 PUSH2 0x2818 JUMP JUMPDEST PUSH2 0xBDE PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x168C PUSH2 0x2CF1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2018B870 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 0x16C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16DB 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 0x16F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xA965D6B5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xA965D6B5 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1733 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1747 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 0x175D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ADD TIMESTAMP SUB GT ISZERO SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1790 CALLER PUSH2 0x1632 JUMP JUMPDEST EQ ISZERO PUSH2 0x17D5 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 0x534C3A5A45524F5F42414C414E4345 PUSH1 0x88 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 0x12 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 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 0x95B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x930 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x95B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x979 PUSH2 0x188E PUSH2 0x1EEF JUMP JUMPDEST DUP5 PUSH2 0xAA0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3E41 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x18B8 PUSH2 0x1EEF 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 0x247E AND JUMP JUMPDEST PUSH1 0xF SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x193A 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 PUSH2 0x1942 PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0x194B CALLER PUSH2 0x2DEB JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x1965 SWAP1 DUP3 PUSH2 0x2EF0 JUMP JUMPDEST PUSH2 0x19A0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER ADDRESS DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2FC5 AND JUMP JUMPDEST PUSH2 0x19AA CALLER DUP3 PUSH2 0x3025 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xEBEDB8B3C678666E7F36970BC8F57ABF6D8FA2E828C0DA91EA5B75BF68ED101A SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP3 SWAP2 PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 SWAP2 DUP5 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 0x1AA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AB8 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 0x1ACE 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 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x979 PUSH2 0x1AF1 PUSH2 0x1EEF JUMP JUMPDEST DUP5 DUP5 PUSH2 0x2162 JUMP JUMPDEST PUSH1 0xE 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 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1B39 PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0x1B41 PUSH2 0x208F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 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 0x73121574A4EADB4CFDEB2BA56A6A88067B03EDD1F0A0DFCAC0A5A95682A24367 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x1C09 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x534C3A4E4F545F5 PUSH1 0xC4 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH2 0x1C1C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x14EA PUSH2 0x1CD9 JUMP JUMPDEST PUSH2 0x1C2F PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0x1C37 PUSH2 0x208F JUMP JUMPDEST PUSH1 0x10 SLOAD DUP2 GT ISZERO PUSH2 0x1C81 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 0x534C3A494E56414C49445F56414C5545 PUSH1 0x80 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 0xCC67306C5D19F79A73208A1270CA19EB367B4BD5258EAC096E974365D18E432C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x14 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 0x1CE3 PUSH2 0x3071 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x1CF3 JUMPI POP PUSH2 0xBDE JUMP JUMPDEST PUSH2 0x14EA PUSH2 0x1CFF DUP3 PUSH2 0x2B2F JUMP JUMPDEST PUSH2 0x308F JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND 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 0x10 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x1DB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x534C3A4E4F545F5 PUSH1 0xC4 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xBDB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x259A AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DF7 PUSH2 0x2CF1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2018B870 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 0x1E32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E46 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 0x1E5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xA965D6B5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xA965D6B5 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EB2 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 0x1EC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP5 ADD ADD TIMESTAMP GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1F38 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 0x3DCF 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 0x1F7D 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 0x3CB1 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 PUSH2 0x1FE7 PUSH2 0x2CF1 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 0x201F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2033 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 0x2049 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0xBDE 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 0x14D30E941493D513D7D4105554D151 PUSH1 0x8A SHL 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 PUSH4 0x4046AF2B 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 0x20E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20FC 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 0x2112 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBDE 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 0x534C3A4E4F545F44454C4547415445 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 PUSH32 0x0 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4F85221A 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 0x21C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21D5 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 0x21EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO DUP1 PUSH2 0x2269 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4046AF2B 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 0x222D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2241 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 0x2257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO JUMPDEST PUSH2 0x22AC 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 0x14D30E94D51052D157D313D0D2D151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x22B4 PUSH2 0x1FDF JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD TIMESTAMP SWAP2 PUSH2 0x22E2 SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST GT ISZERO PUSH2 0x2327 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 0x14D30E9195539114D7D313D0D2D151 PUSH1 0x8A 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 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x234D DUP5 PUSH2 0x1138 DUP9 PUSH2 0x1632 JUMP JUMPDEST LT ISZERO PUSH2 0x23A0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x534C3A494E5355465F5452414E5346455241424C455F42414C00000000000000 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 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x23C2 SWAP1 PUSH2 0x1DEC JUMP JUMPDEST PUSH2 0x2413 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x534C3A524543495049454E545F4E4F545F414C4C4F5745440000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x241E DUP7 PUSH2 0x160C JUMP JUMPDEST EQ PUSH2 0x2462 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 0x534C3A5245434F475F4C4F53534553 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x246C DUP5 DUP5 PUSH2 0x2EF0 JUMP JUMPDEST PUSH2 0x2477 DUP6 DUP6 DUP6 PUSH2 0x3194 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x250D 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 0x24D2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24BA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x24FF 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 0x2520 CALLER PUSH2 0x1499 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2544 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 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 0x25EC SWAP1 DUP5 SWAP1 PUSH2 0x32C0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0xE SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 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 0x265F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2673 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 0x2689 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xE DUP2 SWAP1 SSTORE PUSH2 0x26A0 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3371 AND JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xAA9 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 PUSH2 0xAA9 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 0x247E JUMP JUMPDEST PUSH2 0x274C DUP3 DUP3 PUSH2 0x33D6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x278E PUSH2 0x2769 PUSH2 0x1475 DUP5 PUSH1 0x9 SLOAD PUSH2 0x2A30 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 0x2ACA 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 0x27F3 PUSH2 0x347D JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH2 0x2809 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x2814 PUSH2 0x3071 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4046AF2B 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 0x2871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2885 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 0x289B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2941 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x3099C279 PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 PUSH4 0x613384F2 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2914 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2928 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 0x293E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xBDE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x534C3A4E4F545F44454C45474154455F4F525F41444D494E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xF SLOAD PUSH1 0xFF AND PUSH2 0x29E0 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 0xF DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x2A13 PUSH2 0x1EEF 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 DUP3 PUSH2 0x2A3F JUMPI POP PUSH1 0x0 PUSH2 0x97D JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2A4C JUMPI INVALID JUMPDEST DIV EQ PUSH2 0xAA9 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 0x3D40 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 0x8CA 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 0x2ADF JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x2AF4 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x2AF4 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0xAA9 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 0x3CF9 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 0x2814 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 0x2B7A PUSH2 0x9EF JUMP JUMPDEST GT PUSH2 0x2BBE 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 0x2BC8 JUMPI PUSH2 0x14EA JUMP JUMPDEST PUSH2 0x2BFF PUSH2 0x2BD3 PUSH2 0x9EF JUMP JUMPDEST PUSH2 0x2BE7 DUP4 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x2A30 AND JUMP JUMPDEST DUP2 PUSH2 0x2BEE JUMPI INVALID JUMPDEST PUSH1 0x6 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 0xF SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2CBB 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 0xF DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x2A13 PUSH2 0x1EEF JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD49B38C 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 0x2D4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D60 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 0x2D76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xC3124525 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xC3124525 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 0x2DBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2DCE 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 0x2DE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x2E14 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST DUP1 PUSH2 0x2EAE JUMPI POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4046AF2B 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 0x2E73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E87 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 0x2E9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH2 0x14EA 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 0x14D30E9393D517D0531313D5D151 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 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x2F13 DUP5 PUSH2 0x1632 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP5 DUP4 ADD GT PUSH2 0x2F26 JUMPI DUP3 PUSH2 0x2F68 JUMP JUMPDEST PUSH2 0x2F68 PUSH2 0x2F5B DUP4 DUP7 ADD PUSH2 0x2F4F DUP8 PUSH2 0x2F43 TIMESTAMP DUP10 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2A30 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3502 AND JUMP JUMPDEST DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x11 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 0x9686619568B9BD7C4FAEA3BA0EFBEAB967EC977167B97405AD208F1A9CCEA69 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 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 0x301F SWAP1 DUP6 SWAP1 PUSH2 0x32C0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x302F DUP3 DUP3 PUSH2 0x3544 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x278E PUSH2 0x304C PUSH2 0x1475 DUP5 PUSH1 0x9 SLOAD PUSH2 0x2A30 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 0x3371 AND JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0xC SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x26A0 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3371 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3099 PUSH2 0x9EF JUMP JUMPDEST GT PUSH2 0x30DD 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 0x30E7 JUMPI PUSH2 0x14EA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3120 PUSH2 0x30F4 PUSH2 0x9EF JUMP JUMPDEST PUSH2 0x3108 DUP5 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x2A30 AND JUMP JUMPDEST DUP2 PUSH2 0x310F JUMPI INVALID JUMPDEST PUSH1 0x9 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 PUSH2 0x319F DUP4 DUP4 DUP4 PUSH2 0x3590 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31B9 PUSH2 0x1475 DUP4 PUSH1 0x9 SLOAD PUSH2 0x2A30 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 0x31E6 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2ACA 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 0x3220 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3371 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 0x60 PUSH2 0x3315 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 0x36BC SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x25EC JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x25EC 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 0x3E17 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3386 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x339B JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x339B JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0xAA9 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 0x3DF3 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x33E0 DUP3 DUP3 PUSH2 0x36D3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3422 PUSH2 0x33FD PUSH2 0x1475 DUP5 PUSH1 0x6 SLOAD PUSH2 0x2A30 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 0x2ACA 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 0x3488 CALLER PUSH2 0x160C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x34AC SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 0x0 PUSH2 0xAA9 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 0x37DB JUMP JUMPDEST PUSH2 0x354E DUP3 DUP3 PUSH2 0x3840 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3422 PUSH2 0x356B PUSH2 0x1475 DUP5 PUSH1 0x6 SLOAD PUSH2 0x2A30 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 0x3371 AND JUMP JUMPDEST PUSH2 0x359B DUP4 DUP4 DUP4 PUSH2 0x393C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x35B5 PUSH2 0x1475 DUP4 PUSH1 0x6 SLOAD PUSH2 0x2A30 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 0x35E2 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2ACA 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 0x361C SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3371 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 0x60 PUSH2 0x36CB DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x3AA3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3718 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 0x3D89 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3724 DUP3 PUSH1 0x0 DUP4 PUSH2 0x25EC JUMP JUMPDEST PUSH2 0x3767 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C8F 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 0x247E 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 0x3793 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2700 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 0x0 DUP2 DUP4 PUSH2 0x382A 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 0x24D2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24BA JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x3836 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x389B 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 0x38A7 PUSH1 0x0 DUP4 DUP4 PUSH2 0x25EC JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x38BA SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 0x38E6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 0x3981 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 0x3DAA 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 0x39C6 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 0x3C6C PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x39D1 DUP4 DUP4 DUP4 PUSH2 0x25EC JUMP JUMPDEST PUSH2 0x3A14 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3CD3 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 0x247E 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 0x3A49 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 0x3AE4 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 0x3D1A PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3AED DUP6 PUSH2 0x3BFF JUMP JUMPDEST PUSH2 0x3B3E 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 0x3B7D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3B5E 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 0x3BDF 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 0x3BE4 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x3BF4 DUP3 DUP3 DUP7 PUSH2 0x3C05 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x3C14 JUMPI POP DUP2 PUSH2 0xAA9 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x3C24 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 0x24D2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24BA 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 0xBA 0xBE PUSH19 0x1907316288DC4FF4232212E6E975BE97388EC1 0xB3 0xBB CREATE2 MSIZE PUSH30 0x79E0FFE1F164736F6C634300060B00330000000000000000000000000000 ",
              "sourceMap": "118943:11795:0:-:0;;;119923:337;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;119923:337:0;;;;;;;;;;;;102828:157;;;;;;;;;;-1:-1:-1;;;102828:157:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;102828:157:0;;;;;;;17675:13;;119923:337;;;;;;102828:157;;;119923:337;;102828:157;;;;;;;;;;;;17675:13;;:5;;102828:157;17675:13;:::i;:::-;-1:-1:-1;17698:17:0;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;17725:9:0;:14;;-1:-1:-1;;17725:14:0;;;17737:2;17725:14;;;;-1:-1:-1;;;;;;102946:32:0::1;::::0;;;;;::::1;::::0;116613:7;:15;;;;;;;;120108:32;;;;;::::1;::::0;-1:-1:-1;;;;;120150:36:0;;;;;::::1;::::0;-1:-1:-1;;120196:22:0;;;;::::1;::::0;120245:8:::1;120228:12;:25:::0;118943:11795;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;118943:11795:0;;;-1:-1:-1;118943:11795:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "3482": [
                  {
                    "length": 32,
                    "start": 2780
                  },
                  {
                    "length": 32,
                    "start": 2859
                  },
                  {
                    "length": 32,
                    "start": 5610
                  },
                  {
                    "length": 32,
                    "start": 9752
                  }
                ],
                "3961": [
                  {
                    "length": 32,
                    "start": 4753
                  },
                  {
                    "length": 32,
                    "start": 4886
                  },
                  {
                    "length": 32,
                    "start": 5711
                  },
                  {
                    "length": 32,
                    "start": 6514
                  },
                  {
                    "length": 32,
                    "start": 6713
                  },
                  {
                    "length": 32,
                    "start": 7615
                  }
                ],
                "3964": [
                  {
                    "length": 32,
                    "start": 2560
                  }
                ],
                "3967": [
                  {
                    "length": 32,
                    "start": 2509
                  },
                  {
                    "length": 32,
                    "start": 4043
                  },
                  {
                    "length": 32,
                    "start": 7084
                  },
                  {
                    "length": 32,
                    "start": 7509
                  },
                  {
                    "length": 32,
                    "start": 8337
                  },
                  {
                    "length": 32,
                    "start": 8551
                  },
                  {
                    "length": 32,
                    "start": 10266
                  },
                  {
                    "length": 32,
                    "start": 10446
                  },
                  {
                    "length": 32,
                    "start": 11509
                  },
                  {
                    "length": 32,
                    "start": 11804
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106102d55760003560e01c806370a0823111610182578063af6d5571116100e9578063d63a8e11116100a2578063f2d5d56b1161007c578063f2d5d56b14610839578063fab1107814610865578063fec984e314610882578063ff8871301461088a576102d5565b8063d63a8e11146107dd578063dd62ed3e14610803578063ee947a7c14610831576102d5565b8063af6d557114610719578063b12527f81461073f578063bcd01be71461076d578063c771c3901461078a578063c965b548146107a7578063cc0fef02146107d5576102d5565b8063a457c2d71161013b578063a457c2d71461066e578063a694fc3a1461069a578063a9059cbb146106b7578063a9691f3f146106e3578063aed4966a146106eb578063aedc78c314610711576102d5565b806370a082311461060257806380cd916d146106285780638456cb591461063057806386bf1da3146106385780638a10555c1461065e57806395d89b4114610666576102d5565b80632e17de781161024157806346c162de116101fa5780635190bbaf116101d45780635190bbaf146105a65780635c975abb146105cc57806363f04b15146105d457806366967791146105dc576102d5565b806346c162de146105705780634ab17969146105785780634e97415f14610580576102d5565b80632e17de78146104b5578063313ce567146104d257806339509351146104f05780633f4ba83a1461051c57806340bde09814610524578063443bb2931461054a576102d5565b80631831ccf2116102935780631831ccf214610405578063209b2bca1461040d57806323b872dd1461041557806324600fc31461044b57806327f91856146104535780632ac04ac81461047f576102d5565b806241c52c146102da57806306fdde0314610312578063095ea7b31461038f5780630e754e86146103cf57806316f0115b146103d957806318160ddd146103fd575b600080fd5b610300600480360360208110156102f057600080fd5b50356001600160a01b03166108b0565b60408051918252519081900360200190f35b61031a6108cf565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561035457818101518382015260200161033c565b50505050905090810190601f1680156103815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103bb600480360360408110156103a557600080fd5b506001600160a01b038135169060200135610965565b604080519115158252519081900360200190f35b6103d7610983565b005b6103e16109cb565b604080516001600160a01b039092168252519081900360200190f35b6103006109ef565b6103bb6109f5565b6103e16109fe565b6103bb6004803603606081101561042b57600080fd5b506001600160a01b03813581169160208101359091169060400135610a22565b6103d7610ab0565b6103d76004803603604081101561046957600080fd5b506001600160a01b038135169060200135610be0565b6103d76004803603606081101561049557600080fd5b506001600160a01b03813581169160208101359091169060400135610dcd565b6103d7600480360360208110156104cb57600080fd5b5035610fc6565b6104da6113c3565b6040805160ff9092168252519081900360200190f35b6103bb6004803603604081101561050657600080fd5b506001600160a01b0381351690602001356113cc565b6103d7611420565b6103006004803603602081101561053a57600080fd5b50356001600160a01b0316611430565b6103006004803603602081101561056057600080fd5b50356001600160a01b0316611499565b6103d76114bf565b6103d76114ed565b6103006004803603602081101561059657600080fd5b50356001600160a01b0316611588565b610300600480360360208110156105bc57600080fd5b50356001600160a01b03166115cd565b6103bb6115df565b6103e16115e8565b610300600480360360208110156105f257600080fd5b50356001600160a01b031661160c565b6103006004803603602081101561061857600080fd5b50356001600160a01b0316611632565b6103e161164d565b6103d7611671565b6103bb6004803603602081101561064e57600080fd5b50356001600160a01b0316611681565b6103d7611785565b61031a611820565b6103bb6004803603604081101561068457600080fd5b506001600160a01b038135169060200135611881565b6103d7600480360360208110156106b057600080fd5b50356118ef565b6103bb600480360360408110156106cd57600080fd5b506001600160a01b038135169060200135611ae4565b610300611af8565b6103006004803603602081101561070157600080fd5b50356001600160a01b0316611afe565b610300611b19565b6103006004803603602081101561072f57600080fd5b50356001600160a01b0316611b1f565b6103d76004803603604081101561075557600080fd5b506001600160a01b0381351690602001351515611b31565b6103d76004803603602081101561078357600080fd5b5035611ba1565b6103d7600480360360208110156107a057600080fd5b5035611c27565b610300600480360360408110156107bd57600080fd5b506001600160a01b0381358116916020013516611cbc565b6103d7611cd9565b6103bb600480360360208110156107f357600080fd5b50356001600160a01b0316611d04565b6103006004803603604081101561081957600080fd5b506001600160a01b0381358116916020013516611d19565b610300611d44565b6103d76004803603604081101561084f57600080fd5b506001600160a01b038135169060200135611d4a565b6103bb6004803603602081101561087b57600080fd5b5035611dec565b610300611ed7565b610300600480360360208110156108a057600080fd5b50356001600160a01b0316611edd565b6001600160a01b0381166000908152600860205260409020545b919050565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561095b5780601f106109305761010080835404028352916020019161095b565b820191906000526020600020905b81548152906001019060200180831161093e57829003601f168201915b5050505050905090565b6000610979610972611eef565b8484611ef3565b5060015b92915050565b61098b611fdf565b61099361208f565b6016805460ff191660011790556040517fd33782a61f25b663946a975c2c1799d6e6d2dc636024b8980789f9e9671abb7890600090a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b60165460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610a2f848484612162565b610aa584610a3b611eef565b610aa085604051806060016040528060288152602001613d61602891396001600160a01b038a16600090815260016020526040812090610a79611eef565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61247e16565b611ef3565b5060015b9392505050565b610ab8611fdf565b6000610ac2612515565b905080610acf5750610bde565b610b096001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338363ffffffff61259a16565b604080516370a0823160e01b8152306004820181905291516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692917f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a29184916370a08231916024808301926020929190829003018186803b158015610b9657600080fd5b505afa158015610baa573d6000803e3d6000fd5b505050506040513d6020811015610bc057600080fd5b505160408051918252519081900360200190a3610bdb6125f1565b50505b565b3360009081526014602090815260408083206001600160a01b038616845290915281205490610c15828463ffffffff6126a616565b3360009081526015602052604081205491925090610c39908563ffffffff6126a616565b90506001600160a01b038516610c8d576040805162461bcd60e51b815260206004820152601460248201527329a61d24a72b20a624a22fa1aaa9aa27a224a0a760611b604482015290519081900360640190fd5b83610cd0576040805162461bcd60e51b815260206004820152600e60248201526d14d30e9253959053125117d0535560921b604482015290519081900360640190fd5b610cd933611632565b811115610d20576040805162461bcd60e51b815260206004820152601060248201526f534c3a494e5355465f42414c414e434560801b604482015290519081900360640190fd5b3360008181526014602090815260408083206001600160a01b038a168085529083528184208790558484526015835292819020859055805187815291820186905280519293927f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e89281900390910190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a25050505050565b6001600160a01b038316600090815260146020908152604080832033845290915281205490610e02828463ffffffff61270016565b9050846001600160a01b0316846001600160a01b031614610e60576040805162461bcd60e51b815260206004820152601360248201527229a61d24a72b20a624a22fa922a1a2a4ab22a960691b604482015290519081900360640190fd5b82610ea3576040805162461bcd60e51b815260206004820152600e60248201526d14d30e9253959053125117d0535560921b604482015290519081900360640190fd5b6001600160a01b038516600081815260146020908152604080832033845282528083208590559282526015905290812054610ee4908563ffffffff61270016565b6001600160a01b038088166000818152601560209081526040918290208590558151898152915194955092891693919233927ffaa022ea2cd7f14157070896fabadafe96cc4d4714eef7ae6a992a5084493ed59281900390910190a46040805184815260208101849052815133926001600160a01b038a16927f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e8929081900390910190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a2505050505050565b3360007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b0316634f85221a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561102557600080fd5b505afa158015611039573d6000803e3d6000fd5b505050506040513d602081101561104f57600080fd5b505115806110cd5750806001600160a01b0316634046af2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561109157600080fd5b505afa1580156110a5573d6000803e3d6000fd5b505050506040513d60208110156110bb57600080fd5b50516001600160a01b03838116911614155b611110576040805162461bcd60e51b815260206004820152600f60248201526e14d30e94d51052d157d313d0d2d151608a1b604482015290519081900360640190fd5b611118611fdf565b336000818152601560205260409020549061114490859061113890611632565b9063ffffffff61270016565b1015611197576040805162461bcd60e51b815260206004820152601860248201527f534c3a494e5355465f554e5354414b4541424c455f42414c0000000000000000604482015290519081900360640190fd5b6111a033611681565b6111e7576040805162461bcd60e51b815260206004820152601360248201527229a61d27aaaa29a4a222afa1a7a7a62227aba760691b604482015290519081900360640190fd5b60105433600090815260116020526040902054429161120c919063ffffffff6126a616565b1115611251576040805162461bcd60e51b815260206004820152600f60248201526e14d30e9195539114d7d313d0d2d151608a1b604482015290519081900360640190fd5b6112596114bf565b6112633384612742565b61126b610ab0565b6112be3361128761127a6127e9565b869063ffffffff61270016565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919063ffffffff61259a16565b60408051848152905133917f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd919081900360200190a2604080516370a0823160e01b8152306004820181905291516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692917f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a29184916370a08231916024808301926020929190829003018186803b15801561138157600080fd5b505afa158015611395573d6000803e3d6000fd5b505050506040513d60208110156113ab57600080fd5b505160408051918252519081900360200190a3505050565b60055460ff1690565b60006109796113d9611eef565b84610aa085600160006113ea611eef565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6126a616565b611428612818565b610bde612992565b6001600160a01b0381166000908152600a6020526040812054600160801b9061148b906114869061147a61147561146688611632565b6009549063ffffffff612a3016565b612a89565b9063ffffffff612aca16565b612b2f565b8161149257fe5b0492915050565b6001600160a01b03811660009081526008602052604081205461097d9061113884611588565b60006114c96125f1565b9050600081136114d95750610bde565b6114ea6114e582612b2f565b612b70565b50565b33600090815260126020526040902054611541576040805162461bcd60e51b815260206004820152601060248201526f534c3a4e4f545f554e5354414b494e4760801b604482015290519081900360640190fd5b3360008181526012602090815260408083208390558051928352517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b6001600160a01b038116600090815260076020526040812054600160801b9061148b906114869061147a6114756115be88611632565b6006549063ffffffff612a3016565b60116020526000908152604090205481565b600f5460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152600b602052604081205461097d9061113884611430565b6001600160a01b031660009081526020819052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b611679612818565b610bde612c70565b60008061168c612cf1565b9050806001600160a01b0316632018b8706040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c757600080fd5b505afa1580156116db573d6000803e3d6000fd5b505050506040513d60208110156116f157600080fd5b50516040805163a965d6b560e01b815290516001600160a01b0384169163a965d6b5916004808301926020929190829003018186803b15801561173357600080fd5b505afa158015611747573d6000803e3d6000fd5b505050506040513d602081101561175d57600080fd5b50516001600160a01b0385166000908152601260205260409020540142031115915050919050565b600061179033611632565b14156117d5576040805162461bcd60e51b815260206004820152600f60248201526e534c3a5a45524f5f42414c414e434560881b604482015290519081900360640190fd5b336000818152601260209081526040918290204290819055825190815291517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561095b5780601f106109305761010080835404028352916020019161095b565b600061097961188e611eef565b84610aa085604051806060016040528060258152602001613e4160259139600160006118b8611eef565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61247e16565b600f5460ff161561193a576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b611942611fdf565b61194b33612deb565b336000818152601260205260408120556119659082612ef0565b6119a06001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308463ffffffff612fc516565b6119aa3382613025565b60408051828152905133917febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a919081900360200190a26040805160008152905133917f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d65919081900360200190a2604080516370a0823160e01b8152306004820181905291516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692917f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a29184916370a08231916024808301926020929190829003018186803b158015611aa457600080fd5b505afa158015611ab8573d6000803e3d6000fd5b505050506040513d6020811015611ace57600080fd5b505160408051918252519081900360200190a350565b6000610979611af1611eef565b8484612162565b600e5481565b6001600160a01b03166000908152600b602052604090205490565b600c5481565b60156020526000908152604090205481565b611b39611fdf565b611b4161208f565b6001600160a01b038216600081815260136020908152604091829020805460ff1916851515908117909155825190815291517f73121574a4eadb4cfdeb2ba56a6a88067b03edd1f0a0dfcac0a5a95682a243679281900390910190a25050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c09576040805162461bcd60e51b81526020600482015260086024820152670534c3a4e4f545f560c41b604482015290519081900360640190fd5b600c54611c1c908263ffffffff6126a616565b600c556114ea611cd9565b611c2f611fdf565b611c3761208f565b601054811115611c81576040805162461bcd60e51b815260206004820152601060248201526f534c3a494e56414c49445f56414c554560801b604482015290519081900360640190fd5b60108190556040805182815290517fcc67306c5d19f79a73208a1270ca19eb367b4bd5258eac096e974365d18e432c9181900360200190a150565b601460209081526000928352604080842090915290825290205481565b6000611ce3613071565b905060008113611cf35750610bde565b6114ea611cff82612b2f565b61308f565b60136020526000908152604090205460ff1681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60105481565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611db2576040805162461bcd60e51b81526020600482015260086024820152670534c3a4e4f545f560c41b604482015290519081900360640190fd5b610bdb6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838363ffffffff61259a16565b600080611df7612cf1565b9050806001600160a01b0316632018b8706040518163ffffffff1660e01b815260040160206040518083038186803b158015611e3257600080fd5b505afa158015611e46573d6000803e3d6000fd5b505050506040513d6020811015611e5c57600080fd5b50516040805163a965d6b560e01b815290516001600160a01b0384169163a965d6b5916004808301926020929190829003018186803b158015611e9e57600080fd5b505afa158015611eb2573d6000803e3d6000fd5b505050506040513d6020811015611ec857600080fd5b50518401014211915050919050565b600d5481565b60126020526000908152604090205481565b3390565b6001600160a01b038316611f385760405162461bcd60e51b8152600401808060200182810382526024815260200180613dcf6024913960400191505060405180910390fd5b6001600160a01b038216611f7d5760405162461bcd60e51b8152600401808060200182810382526022815260200180613cb16022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b611fe7612cf1565b6001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b15801561201f57600080fd5b505afa158015612033573d6000803e3d6000fd5b505050506040513d602081101561204957600080fd5b505115610bde576040805162461bcd60e51b815260206004820152600f60248201526e14d30e941493d513d7d4105554d151608a1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634046af2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120e857600080fd5b505afa1580156120fc573d6000803e3d6000fd5b505050506040513d602081101561211257600080fd5b50516001600160a01b03163314610bde576040805162461bcd60e51b815260206004820152600f60248201526e534c3a4e4f545f44454c454741544560881b604482015290519081900360640190fd5b8260007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b0316634f85221a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c157600080fd5b505afa1580156121d5573d6000803e3d6000fd5b505050506040513d60208110156121eb57600080fd5b505115806122695750806001600160a01b0316634046af2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561222d57600080fd5b505afa158015612241573d6000803e3d6000fd5b505050506040513d602081101561225757600080fd5b50516001600160a01b03838116911614155b6122ac576040805162461bcd60e51b815260206004820152600f60248201526e14d30e94d51052d157d313d0d2d151608a1b604482015290519081900360640190fd5b6122b4611fdf565b6010546001600160a01b03861660009081526011602052604090205442916122e2919063ffffffff6126a616565b1115612327576040805162461bcd60e51b815260206004820152600f60248201526e14d30e9195539114d7d313d0d2d151608a1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205461234d8461113888611632565b10156123a0576040805162461bcd60e51b815260206004820152601960248201527f534c3a494e5355465f5452414e5346455241424c455f42414c00000000000000604482015290519081900360640190fd5b6001600160a01b0384166000908152601260205260409020546123c290611dec565b612413576040805162461bcd60e51b815260206004820152601860248201527f534c3a524543495049454e545f4e4f545f414c4c4f5745440000000000000000604482015290519081900360640190fd5b600061241e8661160c565b14612462576040805162461bcd60e51b815260206004820152600f60248201526e534c3a5245434f475f4c4f5353455360881b604482015290519081900360640190fd5b61246c8484612ef0565b612477858585613194565b5050505050565b6000818484111561250d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124d25781810151838201526020016124ba565b50505050905090810190601f1680156124ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061252033611499565b3360009081526008602052604081205491925090612544908363ffffffff6126a616565b336000818152600860209081526040918290208490558151868152908101849052815193945091927ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49281900390910190a25090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526125ec9084906132c0565b505050565b600e54604080516370a0823160e01b81523060048201529051600092916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561265f57600080fd5b505afa158015612673573d6000803e3d6000fd5b505050506040513d602081101561268957600080fd5b5051600e8190556126a0908263ffffffff61337116565b91505090565b600082820183811015610aa9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610aa983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061247e565b61274c82826133d6565b600061278e61276961147584600954612a3090919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff612aca16565b6001600160a01b0384166000818152600a60209081526040918290208490558151848152915193945091927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a2505050565b60006127f361347d565b600c54909150612809908263ffffffff61270016565b600c55612814613071565b5090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634046af2b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561287157600080fd5b505afa158015612885573d6000803e3d6000fd5b505050506040513d602081101561289b57600080fd5b50516001600160a01b0316331480612941575060408051633099c27960e11b815233600482015290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163613384f2916024808301926020929190829003018186803b15801561291457600080fd5b505afa158015612928573d6000803e3d6000fd5b505050506040513d602081101561293e57600080fd5b50515b610bde576040805162461bcd60e51b815260206004820152601860248201527f534c3a4e4f545f44454c45474154455f4f525f41444d494e0000000000000000604482015290519081900360640190fd5b600f5460ff166129e0576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b600f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612a13611eef565b604080516001600160a01b039092168252519081900360200190a1565b600082612a3f5750600061097d565b82820282848281612a4c57fe5b0414610aa95760405162461bcd60e51b8152600401808060200182810382526021815260200180613d406021913960400191505060405180910390fd5b8060008112156108ca576040805162461bcd60e51b815260206004820152600760248201526629a6aa9d27a7a160c91b604482015290519081900360640190fd5b6000828201818312801590612adf5750838112155b80612af45750600083128015612af457508381125b610aa95760405162461bcd60e51b8152600401808060200182810382526021815260200180613cf96021913960400191505060405180910390fd5b600080821215612814576040805162461bcd60e51b8152602060048201526007602482015266534d493a4e454760c81b604482015290519081900360640190fd5b6000612b7a6109ef565b11612bbe576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b80612bc8576114ea565b612bff612bd36109ef565b612be783600160801b63ffffffff612a3016565b81612bee57fe5b60065491900463ffffffff6126a616565b60065560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a260065460408051918252517f1f8d7705f31c3337a080803a8ad7e71946fb88d84738879be2bf402f97156e969181900360200190a150565b600f5460ff1615612cbb576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a13611eef565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630d49b38c6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4c57600080fd5b505afa158015612d60573d6000803e3d6000fd5b505050506040513d6020811015612d7657600080fd5b50516040805163c312452560e01b815290516001600160a01b039092169163c312452591600480820192602092909190829003018186803b158015612dba57600080fd5b505afa158015612dce573d6000803e3d6000fd5b505050506040513d6020811015612de457600080fd5b5051905090565b60165460ff1680612e1457506001600160a01b03811660009081526013602052604090205460ff165b80612eae57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634046af2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e7357600080fd5b505afa158015612e87573d6000803e3d6000fd5b505050506040513d6020811015612e9d57600080fd5b50516001600160a01b038281169116145b6114ea576040805162461bcd60e51b815260206004820152600e60248201526d14d30e9393d517d0531313d5d15160921b604482015290519081900360640190fd5b6001600160a01b03821660009081526011602052604081205490612f1384611632565b905060008084830111612f265782612f68565b612f68612f5b838601612f4f87612f43428963ffffffff61270016565b9063ffffffff612a3016565b9063ffffffff61350216565b849063ffffffff6126a616565b6001600160a01b0386166000818152601160209081526040918290208490558151848152915193945091927f09686619568b9bd7c4faea3ba0efbeab967ec977167b97405ad208f1a9ccea69929181900390910190a25050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261301f9085906132c0565b50505050565b61302f8282613544565b600061278e61304c61147584600954612a3090919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff61337116565b600d8054600c54918290556000916126a0908263ffffffff61337116565b60006130996109ef565b116130dd576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b806130e7576114ea565b60006131206130f46109ef565b61310884600160801b63ffffffff612a3016565b8161310f57fe5b60095491900463ffffffff6126a616565b600981905560408051848152905191925033917ff88156a8032a0d2c65df18fafaf84e0bea647b3d94a0f7fc6ab14c97dec2bf749181900360200190a26040805182815290517f240ce2b5ce9e9e5a70010c7f8034c233d89b7ce2d60f3a38d9bc3ca01a36f88c9181900360200190a15050565b61319f838383613590565b60006131b961147583600954612a3090919063ffffffff16565b6001600160a01b0385166000908152600a6020526040812054919250906131e6908363ffffffff612aca16565b6001600160a01b038087166000908152600a602052604080822084905591871681529081205491925090613220908463ffffffff61337116565b6001600160a01b038087166000908152600a602090815260409182902084905581518681529151939450918916927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a26040805182815290516001600160a01b038716917fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3919081900360200190a2505050505050565b6060613315826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136bc9092919063ffffffff16565b8051909150156125ec5780806020019051602081101561333457600080fd5b50516125ec5760405162461bcd60e51b815260040180806020018281038252602a815260200180613e17602a913960400191505060405180910390fd5b60008183038183128015906133865750838113155b8061339b575060008312801561339b57508381135b610aa95760405162461bcd60e51b8152600401808060200182810382526024815260200180613df36024913960400191505060405180910390fd5b6133e082826136d3565b60006134226133fd61147584600654612a3090919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff612aca16565b6001600160a01b0384166000818152600760209081526040918290208490558151848152915193945091927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a2505050565b60006134883361160c565b336000908152600b6020526040812054919250906134ac908363ffffffff6126a616565b336000818152600b60209081526040918290208490558151868152908101849052815193945091927f814eba35782909dbbaeefb8104073dfca45de43173f7077970c1584b3cf918b59281900390910190a25090565b6000610aa983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137db565b61354e8282613840565b600061342261356b61147584600654612a3090919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff61337116565b61359b83838361393c565b60006135b561147583600654612a3090919063ffffffff16565b6001600160a01b038516600090815260076020526040812054919250906135e2908363ffffffff612aca16565b6001600160a01b038087166000908152600760205260408082208490559187168152908120549192509061361c908463ffffffff61337116565b6001600160a01b0380871660009081526007602090815260409182902084905581518681529151939450918916927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a26040805182815290516001600160a01b038716917ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773919081900360200190a2505050505050565b60606136cb8484600085613aa3565b949350505050565b6001600160a01b0382166137185760405162461bcd60e51b8152600401808060200182810382526021815260200180613d896021913960400191505060405180910390fd5b613724826000836125ec565b61376781604051806060016040528060228152602001613c8f602291396001600160a01b038516600090815260208190526040902054919063ffffffff61247e16565b6001600160a01b038316600090815260208190526040902055600254613793908263ffffffff61270016565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000818361382a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156124d25781810151838201526020016124ba565b50600083858161383657fe5b0495945050505050565b6001600160a01b03821661389b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6138a7600083836125ec565b6002546138ba908263ffffffff6126a616565b6002556001600160a01b0382166000908152602081905260409020546138e6908263ffffffff6126a616565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0383166139815760405162461bcd60e51b8152600401808060200182810382526025815260200180613daa6025913960400191505060405180910390fd5b6001600160a01b0382166139c65760405162461bcd60e51b8152600401808060200182810382526023815260200180613c6c6023913960400191505060405180910390fd5b6139d18383836125ec565b613a1481604051806060016040528060268152602001613cd3602691396001600160a01b038616600090815260208190526040902054919063ffffffff61247e16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613a49908263ffffffff6126a616565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b606082471015613ae45760405162461bcd60e51b8152600401808060200182810382526026815260200180613d1a6026913960400191505060405180910390fd5b613aed85613bff565b613b3e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310613b7d5780518252601f199092019160209182019101613b5e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613bdf576040519150601f19603f3d011682016040523d82523d6000602084013e613be4565b606091505b5091509150613bf4828286613c05565b979650505050505050565b3b151590565b60608315613c14575081610aa9565b825115613c245782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156124d25781810151838201526020016124ba56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220babe721907316288dc4ff4232212e6e975be97388ec1b3bbf5597d79e0ffe1f164736f6c634300060b0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2D5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x182 JUMPI DUP1 PUSH4 0xAF6D5571 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xD63A8E11 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xF2D5D56B GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xF2D5D56B EQ PUSH2 0x839 JUMPI DUP1 PUSH4 0xFAB11078 EQ PUSH2 0x865 JUMPI DUP1 PUSH4 0xFEC984E3 EQ PUSH2 0x882 JUMPI DUP1 PUSH4 0xFF887130 EQ PUSH2 0x88A JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0xD63A8E11 EQ PUSH2 0x7DD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x803 JUMPI DUP1 PUSH4 0xEE947A7C EQ PUSH2 0x831 JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0xAF6D5571 EQ PUSH2 0x719 JUMPI DUP1 PUSH4 0xB12527F8 EQ PUSH2 0x73F JUMPI DUP1 PUSH4 0xBCD01BE7 EQ PUSH2 0x76D JUMPI DUP1 PUSH4 0xC771C390 EQ PUSH2 0x78A JUMPI DUP1 PUSH4 0xC965B548 EQ PUSH2 0x7A7 JUMPI DUP1 PUSH4 0xCC0FEF02 EQ PUSH2 0x7D5 JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x13B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0xA694FC3A EQ PUSH2 0x69A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x6B7 JUMPI DUP1 PUSH4 0xA9691F3F EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0xAED4966A EQ PUSH2 0x6EB JUMPI DUP1 PUSH4 0xAEDC78C3 EQ PUSH2 0x711 JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x602 JUMPI DUP1 PUSH4 0x80CD916D EQ PUSH2 0x628 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x630 JUMPI DUP1 PUSH4 0x86BF1DA3 EQ PUSH2 0x638 JUMPI DUP1 PUSH4 0x8A10555C EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x666 JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0x2E17DE78 GT PUSH2 0x241 JUMPI DUP1 PUSH4 0x46C162DE GT PUSH2 0x1FA JUMPI DUP1 PUSH4 0x5190BBAF GT PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x5190BBAF EQ PUSH2 0x5A6 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x5CC JUMPI DUP1 PUSH4 0x63F04B15 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0x66967791 EQ PUSH2 0x5DC JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0x46C162DE EQ PUSH2 0x570 JUMPI DUP1 PUSH4 0x4AB17969 EQ PUSH2 0x578 JUMPI DUP1 PUSH4 0x4E97415F EQ PUSH2 0x580 JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0x2E17DE78 EQ PUSH2 0x4B5 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x4F0 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x51C JUMPI DUP1 PUSH4 0x40BDE098 EQ PUSH2 0x524 JUMPI DUP1 PUSH4 0x443BB293 EQ PUSH2 0x54A JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 GT PUSH2 0x293 JUMPI DUP1 PUSH4 0x1831CCF2 EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0x209B2BCA EQ PUSH2 0x40D JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x415 JUMPI DUP1 PUSH4 0x24600FC3 EQ PUSH2 0x44B JUMPI DUP1 PUSH4 0x27F91856 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0x2AC04AC8 EQ PUSH2 0x47F JUMPI PUSH2 0x2D5 JUMP JUMPDEST DUP1 PUSH3 0x41C52C EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x312 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x38F JUMPI DUP1 PUSH4 0xE754E86 EQ PUSH2 0x3CF JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x3D9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3FD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x31A PUSH2 0x8CF 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 0x354 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x33C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x381 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 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x965 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x3D7 PUSH2 0x983 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3E1 PUSH2 0x9CB 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 0x300 PUSH2 0x9EF JUMP JUMPDEST PUSH2 0x3BB PUSH2 0x9F5 JUMP JUMPDEST PUSH2 0x3E1 PUSH2 0x9FE JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x42B 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 0xA22 JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0xAB0 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBE0 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x495 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 0xDCD JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xFC6 JUMP JUMPDEST PUSH2 0x4DA PUSH2 0x13C3 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 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x506 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x13CC JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x1420 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1430 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x560 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1499 JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x14BF JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x14ED JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1588 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x3BB PUSH2 0x15DF JUMP JUMPDEST PUSH2 0x3E1 PUSH2 0x15E8 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x160C JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1632 JUMP JUMPDEST PUSH2 0x3E1 PUSH2 0x164D JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x1671 JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x64E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1681 JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x1785 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x1820 JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1881 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x18EF JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1AE4 JUMP JUMPDEST PUSH2 0x300 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x701 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1AFE JUMP JUMPDEST PUSH2 0x300 PUSH2 0x1B19 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B1F JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x755 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 0x1B31 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x783 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1BA1 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C27 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x7BD 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 0x1CBC JUMP JUMPDEST PUSH2 0x3D7 PUSH2 0x1CD9 JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D04 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x819 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 0x1D19 JUMP JUMPDEST PUSH2 0x300 PUSH2 0x1D44 JUMP JUMPDEST PUSH2 0x3D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x84F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1D4A JUMP JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x87B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1DEC JUMP JUMPDEST PUSH2 0x300 PUSH2 0x1ED7 JUMP JUMPDEST PUSH2 0x300 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EDD 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 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 0x95B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x930 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x95B 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 0x93E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x979 PUSH2 0x972 PUSH2 0x1EEF JUMP JUMPDEST DUP5 DUP5 PUSH2 0x1EF3 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x98B PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0x993 PUSH2 0x208F JUMP JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xD33782A61F25B663946A975C2C1799D6E6D2DC636024B8980789F9E9671ABB78 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA2F DUP5 DUP5 DUP5 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0xAA5 DUP5 PUSH2 0xA3B PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0xAA0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3D61 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 0xA79 PUSH2 0x1EEF 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 0x247E AND JUMP JUMPDEST PUSH2 0x1EF3 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xAB8 PUSH2 0x1FDF JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAC2 PUSH2 0x2515 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0xACF JUMPI POP PUSH2 0xBDE JUMP JUMPDEST PUSH2 0xB09 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER DUP4 PUSH4 0xFFFFFFFF PUSH2 0x259A AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP3 SWAP2 PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 SWAP2 DUP5 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 0xB96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBAA 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 0xBC0 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 PUSH2 0xBDB PUSH2 0x25F1 JUMP JUMPDEST POP POP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 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 0xC15 DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0xC39 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0xC8D 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 0x29A61D24A72B20A624A22FA1AAA9AA27A224A0A7 PUSH1 0x61 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH2 0xCD0 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 0x14D30E9253959053125117D05355 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xCD9 CALLER PUSH2 0x1632 JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0xD20 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 0x534C3A494E5355465F42414C414E4345 PUSH1 0x80 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 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP8 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x15 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP1 MLOAD DUP8 DUP2 MSTORE SWAP2 DUP3 ADD DUP7 SWAP1 MSTORE DUP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 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 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0xE02 DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST SWAP1 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xE60 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 0x29A61D24A72B20A624A22FA922A1A2A4AB22A9 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH2 0xEA3 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 0x14D30E9253959053125117D05355 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 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x14 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 0x15 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0xEE4 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 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 CALLER PUSH1 0x0 PUSH32 0x0 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4F85221A 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 0x1025 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1039 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 0x104F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO DUP1 PUSH2 0x10CD JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4046AF2B 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 0x1091 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A5 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 0x10BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO JUMPDEST PUSH2 0x1110 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 0x14D30E94D51052D157D313D0D2D151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1118 PUSH2 0x1FDF JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH2 0x1144 SWAP1 DUP6 SWAP1 PUSH2 0x1138 SWAP1 PUSH2 0x1632 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST LT ISZERO PUSH2 0x1197 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x534C3A494E5355465F554E5354414B4541424C455F42414C0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x11A0 CALLER PUSH2 0x1681 JUMP JUMPDEST PUSH2 0x11E7 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 0x29A61D27AAAA29A4A222AFA1A7A7A62227ABA7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x10 SLOAD CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD TIMESTAMP SWAP2 PUSH2 0x120C SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST GT ISZERO PUSH2 0x1251 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 0x14D30E9195539114D7D313D0D2D151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1259 PUSH2 0x14BF JUMP JUMPDEST PUSH2 0x1263 CALLER DUP5 PUSH2 0x2742 JUMP JUMPDEST PUSH2 0x126B PUSH2 0xAB0 JUMP JUMPDEST PUSH2 0x12BE CALLER PUSH2 0x1287 PUSH2 0x127A PUSH2 0x27E9 JUMP JUMPDEST DUP7 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x259A AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x85082129D87B2FE11527CB1B3B7A520AEB5AA6913F88A3D8757FE40D1DB02FDD SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP3 SWAP2 PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 SWAP2 DUP5 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 0x1381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1395 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 0x13AB 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 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x979 PUSH2 0x13D9 PUSH2 0x1EEF JUMP JUMPDEST DUP5 PUSH2 0xAA0 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x13EA PUSH2 0x1EEF 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 0x26A6 AND JUMP JUMPDEST PUSH2 0x1428 PUSH2 0x2818 JUMP JUMPDEST PUSH2 0xBDE PUSH2 0x2992 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 0x148B SWAP1 PUSH2 0x1486 SWAP1 PUSH2 0x147A PUSH2 0x1475 PUSH2 0x1466 DUP9 PUSH2 0x1632 JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2A30 AND JUMP JUMPDEST PUSH2 0x2A89 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2ACA AND JUMP JUMPDEST PUSH2 0x2B2F JUMP JUMPDEST DUP2 PUSH2 0x1492 JUMPI INVALID JUMPDEST DIV SWAP3 SWAP2 POP 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 0x97D SWAP1 PUSH2 0x1138 DUP5 PUSH2 0x1588 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14C9 PUSH2 0x25F1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x14D9 JUMPI POP PUSH2 0xBDE JUMP JUMPDEST PUSH2 0x14EA PUSH2 0x14E5 DUP3 PUSH2 0x2B2F JUMP JUMPDEST PUSH2 0x2B70 JUMP JUMPDEST POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1541 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 0x534C3A4E4F545F554E5354414B494E47 PUSH1 0x80 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 0x12 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 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 0x148B SWAP1 PUSH2 0x1486 SWAP1 PUSH2 0x147A PUSH2 0x1475 PUSH2 0x15BE DUP9 PUSH2 0x1632 JUMP JUMPDEST PUSH1 0x6 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2A30 AND JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH32 0x0 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 0x97D SWAP1 PUSH2 0x1138 DUP5 PUSH2 0x1430 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 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1679 PUSH2 0x2818 JUMP JUMPDEST PUSH2 0xBDE PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x168C PUSH2 0x2CF1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2018B870 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 0x16C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16DB 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 0x16F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xA965D6B5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xA965D6B5 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1733 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1747 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 0x175D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ADD TIMESTAMP SUB GT ISZERO SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1790 CALLER PUSH2 0x1632 JUMP JUMPDEST EQ ISZERO PUSH2 0x17D5 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 0x534C3A5A45524F5F42414C414E4345 PUSH1 0x88 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 0x12 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 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 0x95B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x930 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x95B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x979 PUSH2 0x188E PUSH2 0x1EEF JUMP JUMPDEST DUP5 PUSH2 0xAA0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3E41 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x18B8 PUSH2 0x1EEF 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 0x247E AND JUMP JUMPDEST PUSH1 0xF SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x193A 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 PUSH2 0x1942 PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0x194B CALLER PUSH2 0x2DEB JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x1965 SWAP1 DUP3 PUSH2 0x2EF0 JUMP JUMPDEST PUSH2 0x19A0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER ADDRESS DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2FC5 AND JUMP JUMPDEST PUSH2 0x19AA CALLER DUP3 PUSH2 0x3025 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xEBEDB8B3C678666E7F36970BC8F57ABF6D8FA2E828C0DA91EA5B75BF68ED101A SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP3 SWAP2 PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 SWAP2 DUP5 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 0x1AA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AB8 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 0x1ACE 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 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x979 PUSH2 0x1AF1 PUSH2 0x1EEF JUMP JUMPDEST DUP5 DUP5 PUSH2 0x2162 JUMP JUMPDEST PUSH1 0xE 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 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1B39 PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0x1B41 PUSH2 0x208F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 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 0x73121574A4EADB4CFDEB2BA56A6A88067B03EDD1F0A0DFCAC0A5A95682A24367 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x1C09 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x534C3A4E4F545F5 PUSH1 0xC4 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH2 0x1C1C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x14EA PUSH2 0x1CD9 JUMP JUMPDEST PUSH2 0x1C2F PUSH2 0x1FDF JUMP JUMPDEST PUSH2 0x1C37 PUSH2 0x208F JUMP JUMPDEST PUSH1 0x10 SLOAD DUP2 GT ISZERO PUSH2 0x1C81 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 0x534C3A494E56414C49445F56414C5545 PUSH1 0x80 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 0xCC67306C5D19F79A73208A1270CA19EB367B4BD5258EAC096E974365D18E432C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x14 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 0x1CE3 PUSH2 0x3071 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x1CF3 JUMPI POP PUSH2 0xBDE JUMP JUMPDEST PUSH2 0x14EA PUSH2 0x1CFF DUP3 PUSH2 0x2B2F JUMP JUMPDEST PUSH2 0x308F JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND 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 0x10 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x1DB2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x534C3A4E4F545F5 PUSH1 0xC4 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xBDB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x259A AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DF7 PUSH2 0x2CF1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2018B870 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 0x1E32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E46 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 0x1E5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xA965D6B5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xA965D6B5 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EB2 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 0x1EC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP5 ADD ADD TIMESTAMP GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1F38 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 0x3DCF 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 0x1F7D 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 0x3CB1 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 PUSH2 0x1FE7 PUSH2 0x2CF1 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 0x201F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2033 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 0x2049 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0xBDE 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 0x14D30E941493D513D7D4105554D151 PUSH1 0x8A SHL 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 PUSH4 0x4046AF2B 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 0x20E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20FC 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 0x2112 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBDE 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 0x534C3A4E4F545F44454C4547415445 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 PUSH32 0x0 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4F85221A 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 0x21C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21D5 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 0x21EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO DUP1 PUSH2 0x2269 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4046AF2B 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 0x222D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2241 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 0x2257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO JUMPDEST PUSH2 0x22AC 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 0x14D30E94D51052D157D313D0D2D151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x22B4 PUSH2 0x1FDF JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD TIMESTAMP SWAP2 PUSH2 0x22E2 SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST GT ISZERO PUSH2 0x2327 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 0x14D30E9195539114D7D313D0D2D151 PUSH1 0x8A 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 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x234D DUP5 PUSH2 0x1138 DUP9 PUSH2 0x1632 JUMP JUMPDEST LT ISZERO PUSH2 0x23A0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x534C3A494E5355465F5452414E5346455241424C455F42414C00000000000000 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 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x23C2 SWAP1 PUSH2 0x1DEC JUMP JUMPDEST PUSH2 0x2413 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x534C3A524543495049454E545F4E4F545F414C4C4F5745440000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x241E DUP7 PUSH2 0x160C JUMP JUMPDEST EQ PUSH2 0x2462 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 0x534C3A5245434F475F4C4F53534553 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x246C DUP5 DUP5 PUSH2 0x2EF0 JUMP JUMPDEST PUSH2 0x2477 DUP6 DUP6 DUP6 PUSH2 0x3194 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x250D 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 0x24D2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24BA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x24FF 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 0x2520 CALLER PUSH2 0x1499 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2544 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 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 0x25EC SWAP1 DUP5 SWAP1 PUSH2 0x32C0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0xE SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 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 0x265F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2673 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 0x2689 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xE DUP2 SWAP1 SSTORE PUSH2 0x26A0 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3371 AND JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xAA9 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 PUSH2 0xAA9 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 0x247E JUMP JUMPDEST PUSH2 0x274C DUP3 DUP3 PUSH2 0x33D6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x278E PUSH2 0x2769 PUSH2 0x1475 DUP5 PUSH1 0x9 SLOAD PUSH2 0x2A30 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 0x2ACA 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 0x27F3 PUSH2 0x347D JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH2 0x2809 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x2814 PUSH2 0x3071 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4046AF2B 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 0x2871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2885 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 0x289B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2941 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x3099C279 PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 PUSH4 0x613384F2 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2914 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2928 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 0x293E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xBDE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x534C3A4E4F545F44454C45474154455F4F525F41444D494E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xF SLOAD PUSH1 0xFF AND PUSH2 0x29E0 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 0xF DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH2 0x2A13 PUSH2 0x1EEF 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 DUP3 PUSH2 0x2A3F JUMPI POP PUSH1 0x0 PUSH2 0x97D JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x2A4C JUMPI INVALID JUMPDEST DIV EQ PUSH2 0xAA9 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 0x3D40 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 0x8CA 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 0x2ADF JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x2AF4 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x2AF4 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0xAA9 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 0x3CF9 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 0x2814 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 0x2B7A PUSH2 0x9EF JUMP JUMPDEST GT PUSH2 0x2BBE 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 0x2BC8 JUMPI PUSH2 0x14EA JUMP JUMPDEST PUSH2 0x2BFF PUSH2 0x2BD3 PUSH2 0x9EF JUMP JUMPDEST PUSH2 0x2BE7 DUP4 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x2A30 AND JUMP JUMPDEST DUP2 PUSH2 0x2BEE JUMPI INVALID JUMPDEST PUSH1 0x6 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 0xF SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2CBB 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 0xF DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x2A13 PUSH2 0x1EEF JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD49B38C 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 0x2D4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D60 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 0x2D76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xC3124525 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xC3124525 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 0x2DBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2DCE 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 0x2DE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x2E14 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST DUP1 PUSH2 0x2EAE JUMPI POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4046AF2B 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 0x2E73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E87 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 0x2E9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH2 0x14EA 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 0x14D30E9393D517D0531313D5D151 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 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x2F13 DUP5 PUSH2 0x1632 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP5 DUP4 ADD GT PUSH2 0x2F26 JUMPI DUP3 PUSH2 0x2F68 JUMP JUMPDEST PUSH2 0x2F68 PUSH2 0x2F5B DUP4 DUP7 ADD PUSH2 0x2F4F DUP8 PUSH2 0x2F43 TIMESTAMP DUP10 PUSH4 0xFFFFFFFF PUSH2 0x2700 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2A30 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3502 AND JUMP JUMPDEST DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x26A6 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x11 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 0x9686619568B9BD7C4FAEA3BA0EFBEAB967EC977167B97405AD208F1A9CCEA69 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 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 0x301F SWAP1 DUP6 SWAP1 PUSH2 0x32C0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x302F DUP3 DUP3 PUSH2 0x3544 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x278E PUSH2 0x304C PUSH2 0x1475 DUP5 PUSH1 0x9 SLOAD PUSH2 0x2A30 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 0x3371 AND JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0xC SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x26A0 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3371 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3099 PUSH2 0x9EF JUMP JUMPDEST GT PUSH2 0x30DD 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 0x30E7 JUMPI PUSH2 0x14EA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3120 PUSH2 0x30F4 PUSH2 0x9EF JUMP JUMPDEST PUSH2 0x3108 DUP5 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x2A30 AND JUMP JUMPDEST DUP2 PUSH2 0x310F JUMPI INVALID JUMPDEST PUSH1 0x9 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 PUSH2 0x319F DUP4 DUP4 DUP4 PUSH2 0x3590 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31B9 PUSH2 0x1475 DUP4 PUSH1 0x9 SLOAD PUSH2 0x2A30 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 0x31E6 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2ACA 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 0x3220 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3371 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 0x60 PUSH2 0x3315 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 0x36BC SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x25EC JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x25EC 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 0x3E17 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3386 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x339B JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x339B JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0xAA9 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 0x3DF3 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x33E0 DUP3 DUP3 PUSH2 0x36D3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3422 PUSH2 0x33FD PUSH2 0x1475 DUP5 PUSH1 0x6 SLOAD PUSH2 0x2A30 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 0x2ACA 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 0x3488 CALLER PUSH2 0x160C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x34AC SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 0x0 PUSH2 0xAA9 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 0x37DB JUMP JUMPDEST PUSH2 0x354E DUP3 DUP3 PUSH2 0x3840 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3422 PUSH2 0x356B PUSH2 0x1475 DUP5 PUSH1 0x6 SLOAD PUSH2 0x2A30 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 0x3371 AND JUMP JUMPDEST PUSH2 0x359B DUP4 DUP4 DUP4 PUSH2 0x393C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x35B5 PUSH2 0x1475 DUP4 PUSH1 0x6 SLOAD PUSH2 0x2A30 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 0x35E2 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2ACA 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 0x361C SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3371 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 0x60 PUSH2 0x36CB DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x3AA3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3718 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 0x3D89 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3724 DUP3 PUSH1 0x0 DUP4 PUSH2 0x25EC JUMP JUMPDEST PUSH2 0x3767 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C8F 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 0x247E 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 0x3793 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2700 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 0x0 DUP2 DUP4 PUSH2 0x382A 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 0x24D2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24BA JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x3836 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x389B 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 0x38A7 PUSH1 0x0 DUP4 DUP4 PUSH2 0x25EC JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x38BA SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 0x38E6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 0x3981 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 0x3DAA 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 0x39C6 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 0x3C6C PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x39D1 DUP4 DUP4 DUP4 PUSH2 0x25EC JUMP JUMPDEST PUSH2 0x3A14 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3CD3 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 0x247E 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 0x3A49 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x26A6 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 0x3AE4 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 0x3D1A PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3AED DUP6 PUSH2 0x3BFF JUMP JUMPDEST PUSH2 0x3B3E 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 0x3B7D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3B5E 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 0x3BDF 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 0x3BE4 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x3BF4 DUP3 DUP3 DUP7 PUSH2 0x3C05 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x3C14 JUMPI POP DUP2 PUSH2 0xAA9 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x3C24 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 0x24D2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24BA 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 0xBA 0xBE PUSH19 0x1907316288DC4FF4232212E6E975BE97388EC1 0xB3 0xBB CREATE2 MSIZE PUSH30 0x79E0FFE1F164736F6C634300060B00330000000000000000000000000000 ",
              "sourceMap": "118943:11795:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29681:129;;;;;;;;;;;;;;;;-1:-1:-1;29681:129:0;-1:-1:-1;;;;;29681:129:0;;:::i;:::-;;;;;;;;;;;;;;;;17811:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19847:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19847:166:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;121538:189;;;:::i;:::-;;119317:38;;;:::i;:::-;;;;-1:-1:-1;;;;;119317:38:0;;;;;;;;;;;;;;18854:98;;;:::i;119824:33::-;;;:::i;119263:48::-;;;:::i;20480:317::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20480:317:0;;;;;;;;;;;;;;;;;:::i;125331:422::-;;;:::i;125759:859::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;125759:859:0;;;;;;;;:::i;126624:772::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;126624:772:0;;;;;;;;;;;;;;;;;:::i;124301:1024::-;;;;;;;;;;;;;;;;-1:-1:-1;124301:1024:0;;:::i;18713:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21192:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21192:215:0;;;;;;;;:::i;128799:113::-;;;:::i;39163:306::-;;;;;;;;;;;;;;;;-1:-1:-1;39163:306:0;-1:-1:-1;;;;;39163:306:0;;:::i;29512:163::-;;;;;;;;;;;;;;;;-1:-1:-1;29512:163:0;-1:-1:-1;;;;;29512:163:0;;:::i;32857:205::-;;;:::i;124077:218::-;;;:::i;29816:305::-;;;;;;;;;;;;;;;;-1:-1:-1;29816:305:0;-1:-1:-1;;;;;29816:305:0;;:::i;119405:73::-;;;;;;;;;;;;;;;;-1:-1:-1;119405:73:0;-1:-1:-1;;;;;119405:73:0;;:::i;116730:76::-;;;:::i;102648:43::-;;;:::i;38851:167::-;;;;;;;;;;;;;;;;-1:-1:-1;38851:167:0;-1:-1:-1;;;;;38851:167:0;;:::i;19010:117::-;;;;;;;;;;;;;;;;-1:-1:-1;19010:117:0;-1:-1:-1;;;;;19010:117:0;;:::i;119212:44::-;;;:::i;128684:109::-;;;:::i;129012:253::-;;;;;;;;;;;;;;;;-1:-1:-1;129012:253:0;-1:-1:-1;;;;;129012:253:0;;:::i;123839:232::-;;;:::i;18005:85::-;;;:::i;21894:266::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21894:266:0;;;;;;;;:::i;122415:600::-;;;;;;;;;;;;;;;;-1:-1:-1;122415:600:0;;:::i;19330:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19330:172:0;;;;;;;;:::i;102780:41::-;;;:::i;39024:133::-;;;;;;;;;;;;;;;;-1:-1:-1;39024:133:0;-1:-1:-1;;;;;39024:133:0;;:::i;102698:33::-;;;:::i;119732:85::-;;;;;;;;;;;;;;;;-1:-1:-1;119732:85:0;-1:-1:-1;;;;;119732:85:0;;:::i;121311:221::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;121311:221:0;;;;;;;;;;:::i;122162:153::-;;;;;;;;;;;;;;;;-1:-1:-1;122162:153:0;;:::i;121733:302::-;;;;;;;;;;;;;;;;-1:-1:-1;121733:302:0;;:::i;119646:80::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;119646:80:0;;;;;;;;;;:::i;41903:206::-;;;:::i;119569:71::-;;;;;;;;;;;;;;;;-1:-1:-1;119569:71:0;-1:-1:-1;;;;;119569:71:0;;:::i;19560:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19560:149:0;;;;;;;;;;:::i;119362:36::-;;;:::i;122041:115::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;122041:115:0;;;;;;;;:::i;129271:257::-;;;;;;;;;;;;;;;;-1:-1:-1;129271:257:0;;:::i;102737:37::-;;;:::i;119484:79::-;;;;;;;;;;;;;;;;-1:-1:-1;119484:79:0;-1:-1:-1;;;;;119484:79:0;;:::i;29681:129::-;-1:-1:-1;;;;;29781:22:0;;29755:7;29781:22;;;:14;:22;;;;;;29681:129;;;;:::o;17811:81::-;17880:5;17873:12;;;;;;;;-1:-1:-1;;17873:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17848:13;;17873:12;;17880:5;;17873:12;;17880:5;17873:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17811:81;:::o;19847:166::-;19930:4;19946:39;19955:12;:10;:12::i;:::-;19969:7;19978:6;19946:8;:39::i;:::-;-1:-1:-1;20002:4:0;19847:166;;;;;:::o;121538:189::-;121601:24;:22;:24::i;:::-;121635:22;:20;:22::i;:::-;121667:12;:19;;-1:-1:-1;;121667:19:0;121682:4;121667:19;;;121701;;;;121667:12;;121701:19;121538:189::o;119317:38::-;;;:::o;18854:98::-;18933:12;;18854:98;:::o;119824:33::-;;;;;;:::o;119263:48::-;;;:::o;20480:317::-;20586:4;20602:36;20612:6;20620:9;20631:6;20602:9;:36::i;:::-;20648:121;20657:6;20665:12;:10;:12::i;:::-;20679:89;20717:6;20679:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20679:19:0;;;;;;:11;:19;;;;;;20699:12;:10;:12::i;:::-;-1:-1:-1;;;;;20679:33:0;;;;;;;;;;;;-1:-1:-1;20679:33:0;;;:89;;:37;:89;:::i;:::-;20648:8;:121::i;:::-;-1:-1:-1;20786:4:0;20480:317;;;;;;:::o;125331:422::-;125407:24;:22;:24::i;:::-;125442:25;125470:18;:16;:18::i;:::-;125442:46;-1:-1:-1;125503:31:0;125499:44;;125536:7;;;125499:44;125553:54;-1:-1:-1;;;;;125553:10:0;:23;125577:10;125589:17;125553:54;:23;:54;:::i;:::-;125673:35;;;-1:-1:-1;;;125673:35:0;;125645:4;125673:35;;;;;;;;-1:-1:-1;;;;;125660:10:0;125622:87;;125645:4;125622:87;;;;125673:20;;:35;;;;;;;;;;;;;;125622:87;125673:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;125673:35:0;125622:87;;;;;;;;;;;125673:35;125622:87;;;125720:26;:24;:26::i;:::-;;125331:422;;:::o;125759:859::-;125901:10;125856:20;125884:28;;;:16;:28;;;;;;;;-1:-1:-1;;;;;125884:39:0;;;;;;;;;;;125961:24;125884:39;125978:6;125961:24;:16;:24;:::i;:::-;126045:10;125995:25;126023:33;;;:21;:33;;;;;;125933:52;;-1:-1:-1;125995:25:0;126023:45;;126061:6;126023:45;:37;:45;:::i;:::-;125995:73;-1:-1:-1;;;;;;126087:23:0;;126079:75;;;;;-1:-1:-1;;;126079:75:0;;;;;;;;;;;;-1:-1:-1;;;126079:75:0;;;;;;;;;;;;;;;126172:23;126164:69;;;;;-1:-1:-1;;;126164:69:0;;;;;;;;;;;;-1:-1:-1;;;126164:69:0;;;;;;;;;;;;;;;126272:21;126282:10;126272:9;:21::i;:::-;126251:17;:42;;126243:71;;;;;-1:-1:-1;;;126243:71:0;;;;;;;;;;;;-1:-1:-1;;;126243:71:0;;;;;;;;;;;;;;;126342:10;126325:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;126325:39:0;;;;;;;;;;;:54;;;126389:33;;;:21;:33;;;;;;:59;;;126463:74;;;;;;;;;;;;;126325:39;;126342:10;126463:74;;;;;;;;;;126552:59;;;;;;;;126581:10;;126552:59;;;;;;;;;;125759:859;;;;;:::o;126624:772::-;-1:-1:-1;;;;;126746:22:0;;126723:20;126746:22;;;:16;:22;;;;;;;;126769:10;126746:34;;;;;;;;;126813:24;126746:34;126830:6;126813:24;:16;:24;:::i;:::-;126790:47;;126862:4;-1:-1:-1;;;;;126856:10:0;:2;-1:-1:-1;;;;;126856:10:0;;126848:54;;;;;-1:-1:-1;;;126848:54:0;;;;;;;;;;;;-1:-1:-1;;;126848:54:0;;;;;;;;;;;;;;;126920:20;126912:49;;;;;-1:-1:-1;;;126912:49:0;;;;;;;;;;;;-1:-1:-1;;;126912:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;126972:22:0;;;;;;:16;:22;;;;;;;;126995:10;126972:34;;;;;;;:49;;;127068:27;;;:21;:27;;;;;;:39;;127100:6;127068:39;:31;:39;:::i;:::-;-1:-1:-1;;;;;127117:27:0;;;;;;;:21;:27;;;;;;;;;:54;;;127186:45;;;;;;;127031:76;;-1:-1:-1;127186:45:0;;;;127117:27;;127202:10;;127186:45;;;;;;;;;;127246:69;;;;;;;;;;;;;;127276:10;;-1:-1:-1;;;;;127246:69:0;;;;;;;;;;;;;;127330:59;;;;;;;;127359:10;;127330:59;;;;;;;;;;126624:772;;;;;;:::o;124301:1024::-;124360:10;120644:11;120664:4;120644:25;;120781:5;-1:-1:-1;;;;;120781:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;120781:23:0;120780:24;;:56;;;120816:5;-1:-1:-1;;;;;120816:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;120816:20:0;-1:-1:-1;;;;;120808:28:0;;;;;;;120780:56;120772:84;;;;;-1:-1:-1;;;120772:84:0;;;;;;;;;;;;-1:-1:-1;;;120772:84:0;;;;;;;;;;;;;;;124382:24:::1;:22;:24::i;:::-;124481:10;124459:33;::::0;;;:21:::1;:33;::::0;;;;;;124425:30:::1;::::0;124451:3;;124425:21:::1;::::0;:9:::1;:21::i;:::-;:25:::0;:30:::1;:25;:30;:::i;:::-;:67;;124417:104;;;::::0;;-1:-1:-1;;;124417:104:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;124597:28;124614:10;124597:16;:28::i;:::-;124589:99;;;::::0;;-1:-1:-1;;;124589:99:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;124589:99:0;;;;;;;;;;;;;::::1;;124732:12;::::0;124716:10:::1;124706:21;::::0;;;:9:::1;:21;::::0;;;;;124749:15:::1;::::0;124706:39:::1;::::0;:21;:39:::1;:25;:39;:::i;:::-;:58;;124698:95;;;::::0;;-1:-1:-1;;;124698:95:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;124698:95:0;;;;;;;;;;;;;::::1;;124804:21;:19;:21::i;:::-;124905:22;124911:10;124923:3;124905:5;:22::i;:::-;124989:15;:13;:15::i;:::-;125079:64;125103:10;125115:27;125123:18;:16;:18::i;:::-;125115:3:::0;;:27:::1;:7;:27;:::i;:::-;-1:-1:-1::0;;;;;125079:10:0::1;:23;::::0;:64;::::1;:23;:64;:::i;:::-;125192:24;::::0;;;;;;;125200:10:::1;::::0;125192:24:::1;::::0;;;;;::::1;::::0;;::::1;125282:35;::::0;;-1:-1:-1;;;125282:35:0;;125254:4:::1;125282:35;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;125269:10:0::1;125231:87;::::0;125254:4;125231:87:::1;::::0;;;125282:20:::1;::::0;:35;;;;;::::1;::::0;;;;;;;;125231:87;125282:35;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;125282:35:0;125231:87:::1;::::0;;;;;;;;;;125282:35:::1;125231:87:::0;;::::1;124301:1024:::0;;;:::o;18713:81::-;18778:9;;;;18713:81;:::o;21192:215::-;21280:4;21296:83;21305:12;:10;:12::i;:::-;21319:7;21328:50;21367:10;21328:11;:25;21340:12;:10;:12::i;:::-;-1:-1:-1;;;;;21328:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21328:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;128799:113::-;128846:33;:31;:33::i;:::-;128889:16;:14;:16::i;39163:306::-;-1:-1:-1;;;;;39385:24:0;;39239:7;39385:24;;;:16;:24;;;;;;-1:-1:-1;;;27391:8:0;39277:166;;:133;;:86;:54;39313:17;39402:6;39313:9;:17::i;:::-;39277:14;;;:54;:35;:54;:::i;:::-;:84;:86::i;:::-;:107;:133;:107;:133;:::i;:::-;:164;:166::i;:::-;:185;;;;;;;39163:306;-1:-1:-1;;39163:306:0:o;29512:163::-;-1:-1:-1;;;;;29645:22:0;;29587:7;29645:22;;;:14;:22;;;;;;29613:55;;:27;29660:6;29613:19;:27::i;32857:205::-;32922:15;32940:26;:24;:26::i;:::-;32922:44;;32993:1;32981:8;:13;32977:26;;32996:7;;;32977:26;33013:42;33030:24;:8;:22;:24::i;:::-;33013:16;:42::i;:::-;32857:205;:::o;124077:218::-;124154:10;124177:1;124138:27;;;:15;:27;;;;;;124130:70;;;;;-1:-1:-1;;;124130:70:0;;;;;;;;;;;;-1:-1:-1;;;124130:70:0;;;;;;;;;;;;;;;124226:10;124240:1;124210:27;;;:15;:27;;;;;;;;:31;;;124256:32;;;;;;;;;;;;;;;;124077:218::o;29816:305::-;-1:-1:-1;;;;;30037:24:0;;29891:7;30037:24;;;:16;:24;;;;;;-1:-1:-1;;;27391:8:0;29929:166;;:133;;:86;:54;29965:17;30054:6;29965:9;:17::i;:::-;29929:14;;;:54;:35;:54;:::i;119405:73::-;;;;;;;;;;;;;:::o;116730:76::-;116792:7;;;;116730:76;:::o;102648:43::-;;;:::o;38851:167::-;-1:-1:-1;;;;;38986:24:0;;38927:7;38986:24;;;:16;:24;;;;;;38953:58;;:28;39003:6;38953:20;:28::i;19010:117::-;-1:-1:-1;;;;;19102:18:0;19076:7;19102:18;;;;;;;;;;;;19010:117::o;119212:44::-;;;:::o;128684:109::-;128729:33;:31;:33::i;:::-;128772:14;:12;:14::i;129012:253::-;129082:4;129098:21;129122:10;:8;:10::i;:::-;129098:34;;129229:7;-1:-1:-1;;;;;129229:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;129229:29:0;129193:30;;;-1:-1:-1;;;129193:30:0;;;;-1:-1:-1;;;;;129193:28:0;;;;;:30;;;;;129229:29;;129193:30;;;;;;;:28;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;129193:30:0;-1:-1:-1;;;;;129169:21:0;;;;;;:15;129193:30;129169:21;;;;;:54;129150:15;:74;129149:109;;;-1:-1:-1;;129012:253:0;;;:::o;123839:232::-;123935:1;123902:21;123912:10;123902:9;:21::i;:::-;:35;;123894:63;;;;;-1:-1:-1;;;123894:63:0;;;;;;;;;;;;-1:-1:-1;;;123894:63:0;;;;;;;;;;;;;;;123983:10;123967:27;;;;:15;:27;;;;;;;;;123997:15;123967:45;;;;124027:37;;;;;;;;;;;;;;;;;123839:232::o;18005:85::-;18076:7;18069:14;;;;;;;;-1:-1:-1;;18069:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18044:13;;18069:14;;18076:7;;18069:14;;18076:7;18069:14;;;;;;;;;;;;;;;;;;;;;;;;21894:266;21987:4;22003:129;22012:12;:10;:12::i;:::-;22026:7;22035:96;22074:15;22035:96;;;;;;;;;;;;;;;;;:11;:25;22047:12;:10;:12::i;:::-;-1:-1:-1;;;;;22035:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;22035:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;122415:600::-;117036:7;;;;117035:8;117027:37;;;;;-1:-1:-1;;;117027:37:0;;;;;;;;;;;;-1:-1:-1;;;117027:37:0;;;;;;;;;;;;;;;122485:24:::1;:22;:24::i;:::-;122519:22;122530:10;122519;:22::i;:::-;122568:10;122590:1;122552:27:::0;;;:15:::1;:27;::::0;;;;:40;122686:33:::1;::::0;122715:3;122686:16:::1;:33::i;:::-;122730:59;-1:-1:-1::0;;;;;122730:10:0::1;:27;122758:10;122778:4;122785:3:::0;122730:59:::1;:27;:59;:::i;:::-;122799:22;122805:10;122817:3;122799:5;:22::i;:::-;122837;::::0;;;;;;;122843:10:::1;::::0;122837:22:::1;::::0;;;;;::::1;::::0;;::::1;122874:32;::::0;;122903:1:::1;122874:32:::0;;;;122883:10:::1;::::0;122874:32:::1;::::0;;;;;::::1;::::0;;::::1;122972:35;::::0;;-1:-1:-1;;;122972:35:0;;122944:4:::1;122972:35;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;122959:10:0::1;122921:87;::::0;122944:4;122921:87:::1;::::0;;;122972:20:::1;::::0;:35;;;;;::::1;::::0;;;;;;;;122921:87;122972:35;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;122972:35:0;122921:87:::1;::::0;;;;;;;;;;122972:35:::1;122921:87:::0;;::::1;122415:600:::0;:::o;19330:172::-;19416:4;19432:42;19442:12;:10;:12::i;:::-;19456:9;19467:6;19432:9;:42::i;102780:41::-;;;;:::o;39024:133::-;-1:-1:-1;;;;;39126:24:0;39100:7;39126:24;;;:16;:24;;;;;;;39024:133::o;102698:33::-;;;;:::o;119732:85::-;;;;;;;;;;;;;:::o;121311:221::-;121388:24;:22;:24::i;:::-;121422:22;:20;:22::i;:::-;-1:-1:-1;;;;;121454:15:0;;;;;;:7;:15;;;;;;;;;:24;;-1:-1:-1;;121454:24:0;;;;;;;;;;121493:32;;;;;;;;;;;;;;;;;121311:221;;:::o;122162:153::-;121168:10;-1:-1:-1;;;;;121182:4:0;121168:18;;121160:39;;;;;-1:-1:-1;;;121160:39:0;;;;;;;;;;;;-1:-1:-1;;;121160:39:0;;;;;;;;;;;;;;;122251:9:::1;::::0;:25:::1;::::0;122265:10;122251:25:::1;:13;:25;:::i;:::-;122239:9;:37:::0;122286:22:::1;:20;:22::i;121733:302::-:0;121811:24;:22;:24::i;:::-;121845:22;:20;:22::i;:::-;121904:12;;121885:15;:31;;121877:60;;;;;-1:-1:-1;;;121877:60:0;;;;;;;;;;;;-1:-1:-1;;;121877:60:0;;;;;;;;;;;;;;;121947:12;:30;;;121992:36;;;;;;;;;;;;;;;;;121733:302;:::o;119646:80::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;41903:206::-;41969:16;41988:22;:20;:22::i;:::-;41969:41;;42038:1;42025:9;:14;42021:27;;42041:7;;;42021:27;42058:44;42076:25;:9;:23;:25::i;:::-;42058:17;:44::i;119569:71::-;;;;;;;;;;;;;;;:::o;19560:149::-;-1:-1:-1;;;;;19675:18:0;;;19649:7;19675:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19560:149::o;119362:36::-;;;;:::o;122041:115::-;121168:10;-1:-1:-1;;;;;121182:4:0;121168:18;;121160:39;;;;;-1:-1:-1;;;121160:39:0;;;;;;;;;;;;-1:-1:-1;;;121160:39:0;;;;;;;;;;;;;;;122116:33:::1;-1:-1:-1::0;;;;;122116:10:0::1;:23;122140:3:::0;122145;122116:33:::1;:23;:33;:::i;129271:257::-:0;129353:4;129369:21;129393:10;:8;:10::i;:::-;129369:34;;129491:7;-1:-1:-1;;;;;129491:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;129491:29:0;129458:30;;;-1:-1:-1;;;129458:30:0;;;;-1:-1:-1;;;;;129458:28:0;;;;;:30;;;;;129491:29;;129458:30;;;;;;;:28;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;129458:30:0;129439:49;;:81;129420:15;:101;;-1:-1:-1;;129271:257:0;;;:::o;102737:37::-;;;;:::o;119484:79::-;;;;;;;;;;;;;:::o;15244:104::-;15331:10;15244:104;:::o;24958:340::-;-1:-1:-1;;;;;25059:19:0;;25051:68;;;;-1:-1:-1;;;25051:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25137:21:0;;25129:68;;;;-1:-1:-1;;;25129:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25208:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25259:32;;;;;;;;;;;;;;;;;24958:340;;;:::o;130614:121::-;130681:10;:8;:10::i;:::-;-1:-1:-1;;;;;130681:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;130681:27:0;130680:28;130672:56;;;;;-1:-1:-1;;;130672:56:0;;;;;;;;;;;;-1:-1:-1;;;130672:56:0;;;;;;;;;;;;;;129897:131;129981:4;-1:-1:-1;;;;;129975:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;129975:26:0;-1:-1:-1;;;;;129961:40:0;:10;:40;129953:68;;;;;-1:-1:-1;;;129953:68:0;;;;;;;;;;;;-1:-1:-1;;;129953:68:0;;;;;;;;;;;;;;127629:958;127716:4;120644:11;120664:4;120644:25;;120781:5;-1:-1:-1;;;;;120781:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;120781:23:0;120780:24;;:56;;;120816:5;-1:-1:-1;;;;;120816:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;120816:20:0;-1:-1:-1;;;;;120808:28:0;;;;;;;120780:56;120772:84;;;;;-1:-1:-1;;;120772:84:0;;;;;;;;;;;;-1:-1:-1;;;120772:84:0;;;;;;;;;;;;;;;127732:24:::1;:22;:24::i;:::-;127794:12;::::0;-1:-1:-1;;;;;127774:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;127811::::1;::::0;127774:33:::1;::::0;:15;:33:::1;:19;:33;:::i;:::-;:52;;127766:83;;;::::0;;-1:-1:-1;;;127766:83:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;127766:83:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;127950:27:0;::::1;;::::0;;;:21:::1;:27;::::0;;;;;127922:24:::1;127942:3:::0;127922:15:::1;127972:4:::0;127922:9:::1;:15::i;:24::-;:55;;127914:93;;;::::0;;-1:-1:-1;;;127914:93:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;128101:19:0;::::1;;::::0;;;:15:::1;:19;::::0;;;;;128084:37:::1;::::0;:16:::1;:37::i;:::-;128076:92;;;::::0;;-1:-1:-1;;;128076:92:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;128271:1;128233:26;128254:4;128233:20;:26::i;:::-;:40;128225:83;;;::::0;;-1:-1:-1;;;128225:83:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;128225:83:0;;;;;;;;;;;;;::::1;;128412:25;128429:2;128433:3;128412:16;:25::i;:::-;128550:30;128566:4;128572:2;128576:3;128550:15;:30::i;:::-;127629:958:::0;;;;;:::o;8448:187::-;8534:7;8569:12;8561:6;;;;8553:29;;;;-1:-1:-1;;;8553:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8604:5:0;;;8448:187::o;29127:379::-;29173:28;29242:31;29262:10;29242:19;:31::i;:::-;29327:10;29283:23;29312:26;;;:14;:26;;;;;;29213:60;;-1:-1:-1;29283:23:0;29312:52;;29213:60;29312:52;:30;:52;:::i;:::-;29389:10;29374:26;;;;:14;:26;;;;;;;;;:44;;;29434:65;;;;;;;;;;;;;29283:81;;-1:-1:-1;29389:10:0;;29434:65;;;;;;;;;;29127:379;;:::o;98979:175::-;99088:58;;;-1:-1:-1;;;;;99088:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;99088:58:0;-1:-1:-1;;;99088:58:0;;;99061:86;;99081:5;;99061:19;:86::i;:::-;98979:175;;;:::o;104029:291::-;104151:17;;104199:35;;;-1:-1:-1;;;104199:35:0;;104228:4;104199:35;;;;;;104100:6;;104151:17;-1:-1:-1;;;;;104199:10:0;:20;;;;:35;;;;;;;;;;;;;;;:20;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;104199:35:0;104179:17;:55;;;104252:61;;104289:22;104252:61;:29;:61;:::i;:::-;104245:68;;;104029:291;:::o;7576:176::-;7634:7;7665:5;;;7688:6;;;;7680:46;;;;;-1:-1:-1;;;7680:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8023:134;8081:7;8107:43;8111:1;8114;8107:43;;;;;;;;;;;;;;;;;:3;:43::i;41524:373::-;41607:27;41619:7;41628:5;41607:11;:27::i;:::-;41645:24;41672:95;41715:42;41716:25;41735:5;41716:14;;:18;;:25;;;;:::i;41715:42::-;-1:-1:-1;;;;;41672:25:0;;;;;;:16;:25;;;;;;;:95;:29;:95;:::i;:::-;-1:-1:-1;;;;;41778:25:0;;;;;;:16;:25;;;;;;;;;:45;;;41839:51;;;;;;;41645:122;;-1:-1:-1;41778:25:0;;41839:51;;;;;;;;;;;41524:373;;;:::o;103160:198::-;103215:14;103250:24;:22;:24::i;:::-;103297:9;;103241:33;;-1:-1:-1;103297:21:0;;103241:33;103297:21;:13;:21;:::i;:::-;103285:9;:33;103329:22;:20;:22::i;:::-;;103160:198;:::o;129626:189::-;129721:4;-1:-1:-1;;;;;129715:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;129715:26:0;-1:-1:-1;;;;;129701:40:0;:10;:40;;:78;;-1:-1:-1;129745:34:0;;;-1:-1:-1;;;129745:34:0;;129768:10;129745:34;;;;;;-1:-1:-1;;;;;129751:4:0;129745:22;;;;:34;;;;;;;;;;;;;;:22;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;129745:34:0;129701:78;129693:115;;;;;-1:-1:-1;;;129693:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;117732:117;117300:7;;;;117292:40;;;;;-1:-1:-1;;;117292:40:0;;;;;;;;;;;;-1:-1:-1;;;117292:40:0;;;;;;;;;;;;;;;117790:7:::1;:15:::0;;-1:-1:-1;;117790:15:0::1;::::0;;117820:22:::1;117829:12;:10;:12::i;:::-;117820:22;::::0;;-1:-1:-1;;;;;117820:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;117732:117::o:0;8882:459::-;8940:7;9181:6;9177:45;;-1:-1:-1;9210:1:0;9203:8;;9177:45;9244:5;;;9248:1;9244;:5;:1;9267:5;;;;;:10;9259:56;;;;-1:-1:-1;;;9259:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6522:132;6609:1;6578:8;6629:6;;;6621:26;;;;;-1:-1:-1;;;6621:26:0;;;;;;;;;;;;-1:-1:-1;;;6621:26:0;;;;;;;;;;;;;;14399:210;14455:6;14484:5;;;14508:6;;;;;;:16;;;14523:1;14518;:6;;14508:16;14507:38;;;;14534:1;14530;:5;:14;;;;;14543:1;14539;:5;14530:14;14499:84;;;;-1:-1:-1;;;14499:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6271:135;6327:7;6359:1;6354;:6;;6346:26;;;;;-1:-1:-1;;;6346:26:0;;;;;;;;;;;;-1:-1:-1;;;6346:26:0;;;;;;;;;;;;;;28526:338;28610:1;28594:13;:11;:13::i;:::-;:17;28586:45;;;;;-1:-1:-1;;;28586:45:0;;;;;;;;;;;;-1:-1:-1;;;28586:45:0;;;;;;;;;;;;;;;28646:10;28642:23;;28658:7;;28642:23;28692:63;28741:13;:11;:13::i;:::-;28711:27;:5;-1:-1:-1;;;28711:27:0;:9;:27;:::i;:::-;:43;;;;;28692:14;;;28711:43;;28692:63;:18;:63;:::i;:::-;28675:14;:80;28770:35;;;;;;;;28787:10;;28770:35;;;;;;;;;;28842:14;;28820:37;;;;;;;;;;;;;;;;28526:338;:::o;117485:115::-;117036:7;;;;117035:8;117027:37;;;;;-1:-1:-1;;;117027:37:0;;;;;;;;;;;;-1:-1:-1;;;117027:37:0;;;;;;;;;;;;;;;117544:7:::1;:14:::0;;-1:-1:-1;;117544:14:0::1;117554:4;117544:14;::::0;;117573:20:::1;117580:12;:10;:12::i;130381:147::-:0;130424:13;130489:4;-1:-1:-1;;;;;130483:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;130483:26:0;130470:50;;;-1:-1:-1;;;130470:50:0;;;;-1:-1:-1;;;;;130470:48:0;;;;;;:50;;;;;130483:26;;130470:50;;;;;;;;:48;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;130470:50:0;;-1:-1:-1;130381:147:0;:::o;130109:202::-;130191:12;;;;;:32;;-1:-1:-1;;;;;;130207:16:0;;;;;;:7;:16;;;;;;;;130191:32;:73;;;;130244:4;-1:-1:-1;;;;;130238:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;130238:26:0;-1:-1:-1;;;;;130227:37:0;;;;;;130191:73;130170:134;;;;;-1:-1:-1;;;130170:134:0;;;;;;;;;;;;-1:-1:-1;;;130170:134:0;;;;;;;;;;;;;;123276:557;-1:-1:-1;;;;;123370:18:0;;123351:16;123370:18;;;:9;:18;;;;;;;123416;123380:7;123416:9;:18::i;:::-;123398:36;;123592:15;123628:1;123621:3;123611:7;:13;123610:19;:128;;123730:8;123610:128;;;123644:71;123657:57;123700:13;;;123657:38;123710:3;123657:29;:15;123677:8;123657:29;:19;:29;:::i;:::-;:33;:38;:33;:38;:::i;:::-;:42;:57;:42;:57;:::i;:::-;123644:8;;:71;:12;:71;:::i;:::-;-1:-1:-1;;;;;123749:18:0;;;;;;:9;:18;;;;;;;;;:28;;;123792:34;;;;;;;123592:146;;-1:-1:-1;123749:18:0;;123792:34;;;;;;;;;;;123276:557;;;;;:::o;99160:203::-;99287:68;;;-1:-1:-1;;;;;99287:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;99287:68:0;-1:-1:-1;;;99287:68:0;;;99260:96;;99280:5;;99260:19;:96::i;:::-;99160:203;;;;:::o;40833:373::-;40916:27;40928:7;40937:5;40916:11;:27::i;:::-;40954:24;40981:95;41024:42;41025:25;41044:5;41025:14;;:18;;:25;;;;:::i;41024:42::-;-1:-1:-1;;;;;40981:25:0;;;;;;:16;:25;;;;;;;:95;:29;:95;:::i;103569:243::-;103680:13;;;103720:9;;103704:25;;;;103628:6;;103747:58;;103680:13;103747:58;:25;:58;:::i;37783:402::-;37868:1;37852:13;:11;:13::i;:::-;:17;37844:45;;;;;-1:-1:-1;;;37844:45:0;;;;;;;;;;;;-1:-1:-1;;;37844:45:0;;;;;;;;;;;;;;;37904:10;37900:23;;37916:7;;37900:23;37933;37959:63;38008:13;:11;:13::i;:::-;37978:27;:5;-1:-1:-1;;;37978:27:0;:9;:27;:::i;:::-;:43;;;;;37959:14;;;37978:43;;37959:63;:18;:63;:::i;:::-;38032:14;:41;;;38089:36;;;;;;;;37933:89;;-1:-1:-1;38107:10:0;;38089:36;;;;;;;;;38140:38;;;;;;;;;;;;;;;;;37783:402;;:::o;39866:663::-;39992:32;40008:4;40014:2;40018:5;39992:15;:32::i;:::-;40035:24;40065:40;:25;40084:5;40065:14;;:18;;:25;;;;:::i;:40::-;-1:-1:-1;;;;;40145:22:0;;40115:27;40145:22;;;:16;:22;;;;;;40035:70;;-1:-1:-1;40115:27:0;40145:45;;40035:70;40145:45;:26;:45;:::i;:::-;-1:-1:-1;;;;;40200:22:0;;;;;;;:16;:22;;;;;;:50;;;40290:20;;;;;;;;;40115:75;;-1:-1:-1;40200:22:0;40290:43;;40315:17;40290:43;:24;:43;:::i;:::-;-1:-1:-1;;;;;40343:20:0;;;;;;;:16;:20;;;;;;;;;:48;;;40407:51;;;;;;;40260:73;;-1:-1:-1;40407:51:0;;;;;;;;;;;;;;;40473:49;;;;;;;;-1:-1:-1;;;;;40473:49:0;;;;;;;;;;;;;39866:663;;;;;;:::o;101242:751::-;101661:23;101687:69;101715:4;101687:69;;;;;;;;;;;;;;;;;101695:5;-1:-1:-1;;;;;101687:27:0;;;:69;;;;;:::i;:::-;101770:17;;101661:95;;-1:-1:-1;101770:21:0;101766:221;;101910:10;101899:30;;;;;;;;;;;;;;;-1:-1:-1;101899:30:0;101891:85;;;;-1:-1:-1;;;101891:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13953:213;14009:6;14038:5;;;14062:6;;;;;;:16;;;14077:1;14072;:6;;14062:16;14061:38;;;;14088:1;14084;:5;:14;;;;;14097:1;14093;:5;14084:14;14053:87;;;;-1:-1:-1;;;14053:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32098:373;32181:27;32193:7;32202:5;32181:11;:27::i;:::-;32219:24;32246:95;32289:42;32290:25;32309:5;32290:14;;:18;;:25;;;;:::i;32289:42::-;-1:-1:-1;;;;;32246:25:0;;;;;;:16;:25;;;;;;;:95;:29;:95;:::i;:::-;-1:-1:-1;;;;;32352:25:0;;;;;;:16;:25;;;;;;;;;:45;;;32413:51;;;;;;;32219:122;;-1:-1:-1;32352:25:0;;32413:51;;;;;;;;;;;32098:373;;;:::o;38452:393::-;38504:28;38567:32;38588:10;38567:20;:32::i;:::-;38658:10;38610:25;38641:28;;;:16;:28;;;;;;38544:55;;-1:-1:-1;38610:25:0;38641:54;;38544:55;38641:54;:32;:54;:::i;:::-;38722:10;38705:28;;;;:16;:28;;;;;;;;;:48;;;38769:69;;;;;;;;;;;;;38610:85;;-1:-1:-1;38722:10:0;;38769:69;;;;;;;;;;38452:393;;:::o;9803:130::-;9861:7;9887:39;9891:1;9894;9887:39;;;;;;;;;;;;;;;;;:3;:39::i;31413:373::-;31496:27;31508:7;31517:5;31496:11;:27::i;:::-;31534:24;31561:95;31604:42;31605:25;31624:5;31605:14;;:18;;:25;;;;:::i;31604:42::-;-1:-1:-1;;;;;31561:25:0;;;;;;:16;:25;;;;;;;:95;:29;:95;:::i;30512:657::-;30638:32;30654:4;30660:2;30664:5;30638:15;:32::i;:::-;30681:21;30711:40;:25;30730:5;30711:14;;:18;;:25;;;;:::i;:40::-;-1:-1:-1;;;;;30791:22:0;;30761:27;30791:22;;;:16;:22;;;;;;30681:70;;-1:-1:-1;30761:27:0;30791:42;;30681:70;30791:42;:26;:42;:::i;:::-;-1:-1:-1;;;;;30843:22:0;;;;;;;:16;:22;;;;;;:50;;;30933:20;;;;;;;;;30761:72;;-1:-1:-1;30843:22:0;30933:40;;30958:14;30933:40;:24;:40;:::i;:::-;-1:-1:-1;;;;;30983:20:0;;;;;;;:16;:20;;;;;;;;;:48;;;31047:51;;;;;;;30903:70;;-1:-1:-1;31047:51:0;;;;;;;;;;;;;;;31113:49;;;;;;;;-1:-1:-1;;;;;31113:49:0;;;;;;;;;;;;;30512:657;;;;;;:::o;94955:193::-;95058:12;95089:52;95111:6;95119:4;95125:1;95128:12;95089:21;:52::i;:::-;95082:59;94955:193;-1:-1:-1;;;;94955:193:0:o;24125:410::-;-1:-1:-1;;;;;24208:21:0;;24200:67;;;;-1:-1:-1;;;24200:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24278:49;24299:7;24316:1;24320:6;24278:20;:49::i;:::-;24359:68;24382:6;24359:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24359:18:0;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;24338:18:0;;:9;:18;;;;;;;;;;:89;24452:12;;:24;;24469:6;24452:24;:16;:24;:::i;:::-;24437:12;:39;24491:37;;;;;;;;24517:1;;-1:-1:-1;;;;;24491:37:0;;;;;;;;;;;;24125:410;;:::o;10415:272::-;10501:7;10535:12;10528:5;10520:28;;;;-1:-1:-1;;;10520:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10558:9;10574:1;10570;:5;;;;;;;10415:272;-1:-1:-1;;;;;10415:272:0:o;23435:370::-;-1:-1:-1;;;;;23518:21:0;;23510:65;;;;;-1:-1:-1;;;23510:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23586:49;23615:1;23619:7;23628:6;23586:20;:49::i;:::-;23661:12;;:24;;23678:6;23661:24;:16;:24;:::i;:::-;23646:12;:39;-1:-1:-1;;;;;23716:18:0;;:9;:18;;;;;;;;;;;:30;;23739:6;23716:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;23695:18:0;;:9;:18;;;;;;;;;;;:51;;;;23761:37;;;;;;;23695:18;;:9;;23761:37;;;;;;;;;;23435:370;;:::o;22634:530::-;-1:-1:-1;;;;;22739:20:0;;22731:70;;;;-1:-1:-1;;;22731:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22819:23:0;;22811:71;;;;-1:-1:-1;;;22811:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22893:47;22914:6;22922:9;22933:6;22893:20;:47::i;:::-;22971:71;22993:6;22971:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22971:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;22951:17:0;;;:9;:17;;;;;;;;;;;:91;;;;23075:20;;;;;;;:32;;23100:6;23075:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;23052:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;23122:35;;;;;;;23052:20;;23122:35;;;;;;;;;;;;;22634:530;;;:::o;95982:523::-;96109:12;96166:5;96141:21;:30;;96133:81;;;;-1:-1:-1;;;96133:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96232:18;96243:6;96232:10;:18::i;:::-;96224:60;;;;;-1:-1:-1;;;96224:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;96355:12;96369:23;96396:6;-1:-1:-1;;;;;96396:11:0;96416:5;96424:4;96396:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;96396:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96354:75;;;;96446:52;96464:7;96473:10;96485:12;96446:17;:52::i;:::-;96439:59;95982:523;-1:-1:-1;;;;;;;95982:523:0:o;92100:413::-;92460:20;92498:8;;;92100:413::o;97485:725::-;97600:12;97628:7;97624:580;;;-1:-1:-1;97658:10:0;97651:17;;97624:580;97769:17;;:21;97765:429;;98027:10;98021:17;98087:15;98074:10;98070:2;98066:19;98059:44;97976:145;98159:20;;-1:-1:-1;;;98159:20:0;;;;;;;;;;;;;;;;;98166:12;;98159:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "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",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "fundsToken()": "63f04b15",
              "fundsTokenBalance()": "a9691f3f",
              "increaseAllowance(address,uint256)": "39509351",
              "increaseCustodyAllowance(address,uint256)": "27f91856",
              "intendToUnstake()": "8a10555c",
              "isReceiveAllowed(uint256)": "fab11078",
              "isUnstakeAllowed(address)": "86bf1da3",
              "liquidityAsset()": "209b2bca",
              "lockupPeriod()": "ee947a7c",
              "lossesBalance()": "fec984e3",
              "name()": "06fdde03",
              "openStakeLockerToPublic()": "0e754e86",
              "openToPublic()": "1831ccf2",
              "pause()": "8456cb59",
              "paused()": "5c975abb",
              "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",
              "symbol()": "95d89b41",
              "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"
            }
          }
        },
        "StakeLockerFDT": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "_fundsToken",
                  "type": "address"
                }
              ],
              "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": "bptLosses",
              "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": [],
              "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": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "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": [
                {
                  "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",
              "bptLosses()": "aedc78c3",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "fundsToken()": "63f04b15",
              "fundsTokenBalance()": "a9691f3f",
              "increaseAllowance(address,uint256)": "39509351",
              "lossesBalance()": "fec984e3",
              "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"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/core/stake-locker/v1/StakeLocker.sol": {
        "ast": {
          "absolutePath": "contracts/core/stake-locker/v1/StakeLocker.sol",
          "exportedSymbols": {
            "Address": [
              3260
            ],
            "BasicFDT": [
              1447
            ],
            "Context": [
              577
            ],
            "ERC20": [
              1075
            ],
            "ExtendedFDT": [
              1880
            ],
            "IBasicFDT": [
              141
            ],
            "IERC20": [
              77
            ],
            "IExtendedFDT": [
              1507
            ],
            "IMapleGlobals": [
              2371
            ],
            "IPool": [
              2866
            ],
            "IPoolFDT": [
              2399
            ],
            "IPoolFactory": [
              2990
            ],
            "IStakeLocker": [
              3850
            ],
            "IStakeLockerFDT": [
              3018
            ],
            "Pausable": [
              3937
            ],
            "SafeERC20": [
              3468
            ],
            "SafeMath": [
              379
            ],
            "SafeMathInt": [
              162
            ],
            "SafeMathUint": [
              185
            ],
            "SignedSafeMath": [
              556
            ],
            "StakeLocker": [
              5009
            ],
            "StakeLockerFDT": [
              3595
            ]
          },
          "id": 5010,
          "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": "123:54:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "285: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": "379: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": "470:2:0"
                  },
                  "returnParameters": {
                    "id": 7,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8,
                        "src": "496:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "496:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "495:9:0"
                  },
                  "scope": 77,
                  "src": "450:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 9,
                    "nodeType": "StructuredDocumentation",
                    "src": "511: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": "607:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "607:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "606:17:0"
                  },
                  "returnParameters": {
                    "id": 15,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 14,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 16,
                        "src": "647:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "647:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "646:9:0"
                  },
                  "scope": 77,
                  "src": "588:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 17,
                    "nodeType": "StructuredDocumentation",
                    "src": "662: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": "894:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 18,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "894: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": "913:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 20,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "913:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "893:35:0"
                  },
                  "returnParameters": {
                    "id": 25,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 24,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 26,
                        "src": "947:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 23,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "947:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "946:6:0"
                  },
                  "scope": 77,
                  "src": "876:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 27,
                    "nodeType": "StructuredDocumentation",
                    "src": "959: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": "1247:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 28,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1247: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": "1262:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 30,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1262:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1246:32:0"
                  },
                  "returnParameters": {
                    "id": 35,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 34,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1302:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1302:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1301:9:0"
                  },
                  "scope": 77,
                  "src": "1228:83:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 37,
                    "nodeType": "StructuredDocumentation",
                    "src": "1317: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": "1981:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 38,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1981: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": "1998:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 40,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1998:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1980:33:0"
                  },
                  "returnParameters": {
                    "id": 45,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 44,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "2032:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 43,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2032:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2031:6:0"
                  },
                  "scope": 77,
                  "src": "1964:74:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 47,
                    "nodeType": "StructuredDocumentation",
                    "src": "2044: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": "2367:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 48,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2367: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": "2383:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 50,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2383: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": "2402:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 52,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2402:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2366:51:0"
                  },
                  "returnParameters": {
                    "id": 57,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 56,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2436:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 55,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2436:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2435:6:0"
                  },
                  "scope": 77,
                  "src": "2345:97:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 59,
                    "nodeType": "StructuredDocumentation",
                    "src": "2448: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": "2626:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 60,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2626: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": "2648:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 62,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2648: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": "2668:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 64,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2668:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2625:57:0"
                  },
                  "src": "2611:72:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 68,
                    "nodeType": "StructuredDocumentation",
                    "src": "2689: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": "2857:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 69,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2857: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": "2880:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 71,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2880: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": "2905:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 73,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2905:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2856:63:0"
                  },
                  "src": "2842:78:0"
                }
              ],
              "scope": 5010,
              "src": "356:2566:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 79,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "3255:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 80,
                  "nodeType": "InheritanceSpecifier",
                  "src": "3255:6:0"
                }
              ],
              "contractDependencies": [
                77
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 78,
                "nodeType": "StructuredDocumentation",
                "src": "3138: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": "3269: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": "3533:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 82,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3533: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": "3553:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 84,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3553:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3532:46:0"
                  },
                  "src": "3510:69:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 88,
                    "nodeType": "StructuredDocumentation",
                    "src": "3585: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": "3926:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 89,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3926: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": "3946:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 91,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3946: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": "3970:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 93,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3970:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3925:68:0"
                  },
                  "src": "3905:89:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 97,
                    "nodeType": "StructuredDocumentation",
                    "src": "4000: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": "4212:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 98,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4212:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4211:9:0"
                  },
                  "src": "4184:37:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 102,
                    "nodeType": "StructuredDocumentation",
                    "src": "4227: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": "4497:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 103,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4497: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": "4514:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 105,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4514:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4496:25:0"
                  },
                  "src": "4467:55:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 109,
                    "nodeType": "StructuredDocumentation",
                    "src": "4528: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": "4763:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4763:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4762:16:0"
                  },
                  "returnParameters": {
                    "id": 115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 114,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 116,
                        "src": "4802:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 113,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4802:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4801:9:0"
                  },
                  "scope": 141,
                  "src": "4734:77:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 117,
                    "nodeType": "StructuredDocumentation",
                    "src": "4817: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": "4926:2:0"
                  },
                  "returnParameters": {
                    "id": 119,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4937:0:0"
                  },
                  "scope": 141,
                  "src": "4904:34:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 121,
                    "nodeType": "StructuredDocumentation",
                    "src": "4944: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": "5180:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 122,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5180:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5179:16:0"
                  },
                  "returnParameters": {
                    "id": 127,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 126,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 128,
                        "src": "5219:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 125,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5219:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5218:9:0"
                  },
                  "scope": 141,
                  "src": "5154:74:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 129,
                    "nodeType": "StructuredDocumentation",
                    "src": "5234: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": "5690:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 130,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5690:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5689:16:0"
                  },
                  "returnParameters": {
                    "id": 135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 134,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 136,
                        "src": "5729:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5729:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5728:9:0"
                  },
                  "scope": 141,
                  "src": "5661:77:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 137,
                    "nodeType": "StructuredDocumentation",
                    "src": "5744: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": "6145:2:0"
                  },
                  "returnParameters": {
                    "id": 139,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6156:0:0"
                  },
                  "scope": 141,
                  "src": "6117:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5010,
              "src": "3232:2928:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": null,
              "fullyImplemented": true,
              "id": 162,
              "linearizedBaseContracts": [
                162
              ],
              "name": "SafeMathInt",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 160,
                    "nodeType": "Block",
                    "src": "6336:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 151,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 149,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 143,
                                "src": "6354:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 150,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6359:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "6354:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534d493a4e4547",
                              "id": 152,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6362: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": 148,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6346:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6346:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 154,
                        "nodeType": "ExpressionStatement",
                        "src": "6346:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 157,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 143,
                              "src": "6397:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 156,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6389:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 155,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6389:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6389:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 147,
                        "id": 159,
                        "nodeType": "Return",
                        "src": "6382:17:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 161,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint256Safe",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 144,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 143,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 161,
                        "src": "6294:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 142,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6294:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6293:10:0"
                  },
                  "returnParameters": {
                    "id": 147,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 146,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 161,
                        "src": "6327:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 145,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6327:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6326:9:0"
                  },
                  "scope": 162,
                  "src": "6271:135:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 5010,
              "src": "6244:165:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": null,
              "fullyImplemented": true,
              "id": 185,
              "linearizedBaseContracts": [
                185
              ],
              "name": "SafeMathUint",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 183,
                    "nodeType": "Block",
                    "src": "6588:66:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 169,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 167,
                            "src": "6598:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 172,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 164,
                                "src": "6609:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 171,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6602:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int256_$",
                                "typeString": "type(int256)"
                              },
                              "typeName": {
                                "id": 170,
                                "name": "int256",
                                "nodeType": "ElementaryTypeName",
                                "src": "6602:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6602:9:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "6598:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 175,
                        "nodeType": "ExpressionStatement",
                        "src": "6598:13:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 179,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 177,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 167,
                                "src": "6629:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 178,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6634:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "6629:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534d553a4f4f42",
                              "id": 180,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6637: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": 176,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6621:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6621:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 182,
                        "nodeType": "ExpressionStatement",
                        "src": "6621:26:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 184,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt256Safe",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 165,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 164,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 184,
                        "src": "6544:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 163,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6544:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6543:11:0"
                  },
                  "returnParameters": {
                    "id": 168,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 167,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 184,
                        "src": "6578:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 166,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6578:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6577:10:0"
                  },
                  "scope": 185,
                  "src": "6522:132:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 5010,
              "src": "6494:163:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 186,
                "nodeType": "StructuredDocumentation",
                "src": "6760: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": 379,
              "linearizedBaseContracts": [
                379
              ],
              "name": "SafeMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 211,
                    "nodeType": "Block",
                    "src": "7643:109:0",
                    "statements": [
                      {
                        "assignments": [
                          197
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 197,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 211,
                            "src": "7653:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 196,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7653:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 201,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 198,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 189,
                            "src": "7665:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 199,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 191,
                            "src": "7669:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7665:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7653:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 205,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 203,
                                "name": "c",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 197,
                                "src": "7688:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 204,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 189,
                                "src": "7693:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7688:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206164646974696f6e206f766572666c6f77",
                              "id": 206,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7696: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": 202,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7680:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7680:46:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 208,
                        "nodeType": "ExpressionStatement",
                        "src": "7680:46:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 209,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 197,
                          "src": "7744:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 195,
                        "id": 210,
                        "nodeType": "Return",
                        "src": "7737:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 187,
                    "nodeType": "StructuredDocumentation",
                    "src": "7347: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": 212,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 192,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 189,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 212,
                        "src": "7589:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 188,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7589:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 191,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 212,
                        "src": "7600:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 190,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7600:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7588:22:0"
                  },
                  "returnParameters": {
                    "id": 195,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 194,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 212,
                        "src": "7634:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 193,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7634:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7633:9:0"
                  },
                  "scope": 379,
                  "src": "7576:176:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 228,
                    "nodeType": "Block",
                    "src": "8090:67:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 223,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 215,
                              "src": "8111:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 224,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 217,
                              "src": "8114:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a207375627472616374696f6e206f766572666c6f77",
                              "id": 225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8117: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": 222,
                            "name": "sub",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              229,
                              257
                            ],
                            "referencedDeclaration": 257,
                            "src": "8107: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": 226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8107:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 221,
                        "id": 227,
                        "nodeType": "Return",
                        "src": "8100:50:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 213,
                    "nodeType": "StructuredDocumentation",
                    "src": "7758: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": 229,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 215,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 229,
                        "src": "8036:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 214,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8036:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 217,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 229,
                        "src": "8047:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 216,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8047:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8035:22:0"
                  },
                  "returnParameters": {
                    "id": 221,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 220,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 229,
                        "src": "8081:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 219,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8081:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8080:9:0"
                  },
                  "scope": 379,
                  "src": "8023:134:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 256,
                    "nodeType": "Block",
                    "src": "8543:92:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 244,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 242,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 234,
                                "src": "8561:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 243,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 232,
                                "src": "8566:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8561:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 245,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 236,
                              "src": "8569: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": 241,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8553:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8553:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 247,
                        "nodeType": "ExpressionStatement",
                        "src": "8553:29:0"
                      },
                      {
                        "assignments": [
                          249
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 249,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 256,
                            "src": "8592:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 248,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8592:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 253,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 250,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 232,
                            "src": "8604:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 251,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 234,
                            "src": "8608:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8604:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8592:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 254,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 249,
                          "src": "8627:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 240,
                        "id": 255,
                        "nodeType": "Return",
                        "src": "8620:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 230,
                    "nodeType": "StructuredDocumentation",
                    "src": "8163: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": 257,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 237,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 232,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 257,
                        "src": "8461:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 231,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8461:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 234,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 257,
                        "src": "8472:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 233,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8472:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 236,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 257,
                        "src": "8483:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 235,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "8483:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8460:50:0"
                  },
                  "returnParameters": {
                    "id": 240,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 239,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 257,
                        "src": "8534:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 238,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8534:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8533:9:0"
                  },
                  "scope": 379,
                  "src": "8448:187:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 291,
                    "nodeType": "Block",
                    "src": "8949:392:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 267,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 260,
                            "src": "9181:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 268,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9186:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9181:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 273,
                        "nodeType": "IfStatement",
                        "src": "9177:45:0",
                        "trueBody": {
                          "id": 272,
                          "nodeType": "Block",
                          "src": "9189:33:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 270,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9210:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 266,
                              "id": 271,
                              "nodeType": "Return",
                              "src": "9203:8:0"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          275
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 275,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 291,
                            "src": "9232:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 274,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9232:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 279,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 276,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 260,
                            "src": "9244:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 277,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 262,
                            "src": "9248:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9244:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9232:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 283,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 281,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 275,
                                  "src": "9267:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 282,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 260,
                                  "src": "9271:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "9267:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 284,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 262,
                                "src": "9276:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9267:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 286,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9279: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": 280,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9259:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9259:56:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 288,
                        "nodeType": "ExpressionStatement",
                        "src": "9259:56:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 289,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 275,
                          "src": "9333:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 266,
                        "id": 290,
                        "nodeType": "Return",
                        "src": "9326:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 258,
                    "nodeType": "StructuredDocumentation",
                    "src": "8641: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": 292,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 263,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 260,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 292,
                        "src": "8895:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 259,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8895:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 262,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 292,
                        "src": "8906:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 261,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8906:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8894:22:0"
                  },
                  "returnParameters": {
                    "id": 266,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 265,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 292,
                        "src": "8940:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 264,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8940:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8939:9:0"
                  },
                  "scope": 379,
                  "src": "8882:459:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 308,
                    "nodeType": "Block",
                    "src": "9870:63:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 303,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 295,
                              "src": "9891:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 304,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 297,
                              "src": "9894:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206469766973696f6e206279207a65726f",
                              "id": 305,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9897: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": 302,
                            "name": "div",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              309,
                              337
                            ],
                            "referencedDeclaration": 337,
                            "src": "9887: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": 306,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9887:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 301,
                        "id": 307,
                        "nodeType": "Return",
                        "src": "9880:46:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 293,
                    "nodeType": "StructuredDocumentation",
                    "src": "9347: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": 309,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 298,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 295,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 309,
                        "src": "9816:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 294,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9816:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 297,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 309,
                        "src": "9827:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 296,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9827:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9815:22:0"
                  },
                  "returnParameters": {
                    "id": 301,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 300,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 309,
                        "src": "9861:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 299,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9861:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9860:9:0"
                  },
                  "scope": 379,
                  "src": "9803:130:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 336,
                    "nodeType": "Block",
                    "src": "10510:177:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 322,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 314,
                                "src": "10528:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 323,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10532:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "10528:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 325,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 316,
                              "src": "10535: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": 321,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "10520:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10520:28:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 327,
                        "nodeType": "ExpressionStatement",
                        "src": "10520:28:0"
                      },
                      {
                        "assignments": [
                          329
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 329,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 336,
                            "src": "10558:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 328,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10558:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 333,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 330,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 312,
                            "src": "10570:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 331,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 314,
                            "src": "10574:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10570:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10558:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 334,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 329,
                          "src": "10679:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 320,
                        "id": 335,
                        "nodeType": "Return",
                        "src": "10672:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 310,
                    "nodeType": "StructuredDocumentation",
                    "src": "9939: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": 337,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 317,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 312,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 337,
                        "src": "10428:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 311,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10428:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 314,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 337,
                        "src": "10439:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 313,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10439:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 316,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 337,
                        "src": "10450:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 315,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "10450:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10427:50:0"
                  },
                  "returnParameters": {
                    "id": 320,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 319,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 337,
                        "src": "10501:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 318,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10501:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10500:9:0"
                  },
                  "scope": 379,
                  "src": "10415:272:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 353,
                    "nodeType": "Block",
                    "src": "11205:61:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 348,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 340,
                              "src": "11226:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 349,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 342,
                              "src": "11229:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206d6f64756c6f206279207a65726f",
                              "id": 350,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11232: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": 347,
                            "name": "mod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              354,
                              378
                            ],
                            "referencedDeclaration": 378,
                            "src": "11222: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": 351,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11222:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 346,
                        "id": 352,
                        "nodeType": "Return",
                        "src": "11215:44:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 338,
                    "nodeType": "StructuredDocumentation",
                    "src": "10693: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": 354,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 343,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 340,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 354,
                        "src": "11151:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 339,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11151:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 342,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 354,
                        "src": "11162:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 341,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11162:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11150:22:0"
                  },
                  "returnParameters": {
                    "id": 346,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 345,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 354,
                        "src": "11196:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 344,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11196:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11195:9:0"
                  },
                  "scope": 379,
                  "src": "11138:128:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 377,
                    "nodeType": "Block",
                    "src": "11832:68:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 369,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 367,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 359,
                                "src": "11850:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 368,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11855:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "11850:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 370,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 361,
                              "src": "11858: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": 366,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "11842:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11842:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 372,
                        "nodeType": "ExpressionStatement",
                        "src": "11842:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 373,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 357,
                            "src": "11888:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 374,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 359,
                            "src": "11892:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11888:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 365,
                        "id": 376,
                        "nodeType": "Return",
                        "src": "11881:12:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 355,
                    "nodeType": "StructuredDocumentation",
                    "src": "11272: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": 378,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 362,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 357,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 378,
                        "src": "11750:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 356,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11750:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 359,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 378,
                        "src": "11761:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 358,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11761:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 361,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 378,
                        "src": "11772:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 360,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "11772:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11749:50:0"
                  },
                  "returnParameters": {
                    "id": 365,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 364,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 378,
                        "src": "11823:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 363,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11823:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11822:9:0"
                  },
                  "scope": 379,
                  "src": "11737:163:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 5010,
              "src": "7324:4578:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 380,
                "nodeType": "StructuredDocumentation",
                "src": "12011:104:0",
                "text": " @title SignedSafeMath\n @dev Signed math operations with safety checks that revert on error."
              },
              "fullyImplemented": true,
              "id": 556,
              "linearizedBaseContracts": [
                556
              ],
              "name": "SignedSafeMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 386,
                  "mutability": "constant",
                  "name": "_INT256_MIN",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 556,
                  "src": "12145:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 381,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12145: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": 385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "12183:2:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12184: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": 384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12187:3:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "255"
                    },
                    "src": "12183:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_minus_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const -578...(70 digits omitted)...9968"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 434,
                    "nodeType": "Block",
                    "src": "12500:490:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 396,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 389,
                            "src": "12732:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 397,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12737:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "12732:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 402,
                        "nodeType": "IfStatement",
                        "src": "12728:45:0",
                        "trueBody": {
                          "id": 401,
                          "nodeType": "Block",
                          "src": "12740:33:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 399,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12761:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 395,
                              "id": 400,
                              "nodeType": "Return",
                              "src": "12754:8:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 413,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "12791:30:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 411,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 407,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 404,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 389,
                                        "src": "12793:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 406,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "12798:2:0",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 405,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "12799: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": "12793:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 410,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 408,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 391,
                                        "src": "12804:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 409,
                                        "name": "_INT256_MIN",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 386,
                                        "src": "12809:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "12804:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "12793:27:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 412,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "12792:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 414,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12823: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": 403,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "12783:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12783:82:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 416,
                        "nodeType": "ExpressionStatement",
                        "src": "12783:82:0"
                      },
                      {
                        "assignments": [
                          418
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 418,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 434,
                            "src": "12876:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 417,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12876:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 422,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 419,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 389,
                            "src": "12887:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 420,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 391,
                            "src": "12891:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "12887:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12876:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 428,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 426,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 424,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 418,
                                  "src": "12910:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 425,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 389,
                                  "src": "12914:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "12910:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 427,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 391,
                                "src": "12919:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "12910:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 429,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12922: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": 423,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "12902:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12902:62:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 431,
                        "nodeType": "ExpressionStatement",
                        "src": "12902:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 432,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 418,
                          "src": "12982:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 395,
                        "id": 433,
                        "nodeType": "Return",
                        "src": "12975:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 387,
                    "nodeType": "StructuredDocumentation",
                    "src": "12197: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": 435,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 392,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 389,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 435,
                        "src": "12449:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 388,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12449:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 391,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 435,
                        "src": "12459:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 390,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12459:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12448:20:0"
                  },
                  "returnParameters": {
                    "id": 395,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 394,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 435,
                        "src": "12492:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 393,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12492:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12491:8:0"
                  },
                  "scope": 556,
                  "src": "12436:554:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 474,
                    "nodeType": "Block",
                    "src": "13514:200:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 446,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 440,
                                "src": "13532:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 447,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13537:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "13532:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206469766973696f6e206279207a65726f",
                              "id": 449,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13540: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": 445,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "13524:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13524:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 451,
                        "nodeType": "ExpressionStatement",
                        "src": "13524:51:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 462,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "13593:30:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 460,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 456,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 453,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 440,
                                        "src": "13595:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 455,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "13600:2:0",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 454,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "13601: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": "13595:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 459,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 457,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 438,
                                        "src": "13606:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 458,
                                        "name": "_INT256_MIN",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 386,
                                        "src": "13611:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "13606:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "13595:27:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 461,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "13594:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f77",
                              "id": 463,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13625: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": 452,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "13585:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13585:76:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 465,
                        "nodeType": "ExpressionStatement",
                        "src": "13585:76:0"
                      },
                      {
                        "assignments": [
                          467
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 467,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 474,
                            "src": "13672:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 466,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13672:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 471,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 468,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 438,
                            "src": "13683:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 469,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 440,
                            "src": "13687:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "13683:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13672:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 472,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 467,
                          "src": "13706:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 444,
                        "id": 473,
                        "nodeType": "Return",
                        "src": "13699:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 436,
                    "nodeType": "StructuredDocumentation",
                    "src": "12996: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": 475,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 441,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 438,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 475,
                        "src": "13463:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 437,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13463:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 440,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 475,
                        "src": "13473:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 439,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13473:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13462:20:0"
                  },
                  "returnParameters": {
                    "id": 444,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 443,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 475,
                        "src": "13506:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 442,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13506:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13505:8:0"
                  },
                  "scope": 556,
                  "src": "13450:264:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 514,
                    "nodeType": "Block",
                    "src": "14017:149:0",
                    "statements": [
                      {
                        "assignments": [
                          486
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 486,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 514,
                            "src": "14027:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 485,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "14027:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 490,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 487,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 478,
                            "src": "14038:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 488,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 480,
                            "src": "14042:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "14038:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14027:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 508,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 498,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 494,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 492,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 480,
                                        "src": "14062:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 493,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "14067:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "14062:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 497,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 495,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 486,
                                        "src": "14072:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 496,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 478,
                                        "src": "14077:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "14072:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "14062:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 499,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "14061:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 506,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 502,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 500,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 480,
                                        "src": "14084:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 501,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "14088:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "14084:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 505,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 503,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 486,
                                        "src": "14093:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 504,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 478,
                                        "src": "14097:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "14093:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "14084:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 507,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "14083:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "14061:38:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77",
                              "id": 509,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14101: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": 491,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "14053:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14053:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 511,
                        "nodeType": "ExpressionStatement",
                        "src": "14053:87:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 512,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 486,
                          "src": "14158:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 484,
                        "id": 513,
                        "nodeType": "Return",
                        "src": "14151:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 476,
                    "nodeType": "StructuredDocumentation",
                    "src": "13720: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": 515,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 481,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 478,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 515,
                        "src": "13966:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 477,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13966:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 480,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 515,
                        "src": "13976:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 479,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13976:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13965:20:0"
                  },
                  "returnParameters": {
                    "id": 484,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 483,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 515,
                        "src": "14009:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 482,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14009:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14008:8:0"
                  },
                  "scope": 556,
                  "src": "13953:213:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 554,
                    "nodeType": "Block",
                    "src": "14463:146:0",
                    "statements": [
                      {
                        "assignments": [
                          526
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 526,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 554,
                            "src": "14473:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 525,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "14473:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 530,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 527,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 518,
                            "src": "14484:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 528,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 520,
                            "src": "14488:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "14484:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14473:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 548,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 538,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 534,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 532,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 520,
                                        "src": "14508:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 533,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "14513:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "14508:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 537,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 535,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 526,
                                        "src": "14518:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 536,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 518,
                                        "src": "14523:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "14518:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "14508:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 539,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "14507:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 546,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 542,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 540,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 520,
                                        "src": "14530:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 541,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "14534:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "14530:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 545,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 543,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 526,
                                        "src": "14539:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 544,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 518,
                                        "src": "14543:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "14539:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "14530:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 547,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "14529:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "14507:38:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77",
                              "id": 549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14547: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": 531,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "14499:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14499:84:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 551,
                        "nodeType": "ExpressionStatement",
                        "src": "14499:84:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 552,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 526,
                          "src": "14601:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 524,
                        "id": 553,
                        "nodeType": "Return",
                        "src": "14594:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 516,
                    "nodeType": "StructuredDocumentation",
                    "src": "14172: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": 555,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 521,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 518,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 555,
                        "src": "14412:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 517,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14412:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 520,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 555,
                        "src": "14422:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 519,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14422:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14411:20:0"
                  },
                  "returnParameters": {
                    "id": 524,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 523,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 555,
                        "src": "14455:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 522,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14455:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14454:8:0"
                  },
                  "scope": 556,
                  "src": "14399:210:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 5010,
              "src": "12116:2495:0"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": null,
              "fullyImplemented": true,
              "id": 577,
              "linearizedBaseContracts": [
                577
              ],
              "name": "Context",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 564,
                    "nodeType": "Block",
                    "src": "15314:34:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 561,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "15331:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 562,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15331:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "functionReturnParameters": 560,
                        "id": 563,
                        "nodeType": "Return",
                        "src": "15324:17:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 565,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgSender",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 557,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15263:2:0"
                  },
                  "returnParameters": {
                    "id": 560,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 559,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 565,
                        "src": "15297:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 558,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15297:15:0",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15296:17:0"
                  },
                  "scope": 577,
                  "src": "15244:104:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 575,
                    "nodeType": "Block",
                    "src": "15419:165:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 570,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "15429:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Context_$577",
                            "typeString": "contract Context"
                          }
                        },
                        "id": 571,
                        "nodeType": "ExpressionStatement",
                        "src": "15429:4:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 572,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "15569:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15569:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "functionReturnParameters": 569,
                        "id": 574,
                        "nodeType": "Return",
                        "src": "15562:15:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 576,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgData",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 566,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15371:2:0"
                  },
                  "returnParameters": {
                    "id": 569,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 568,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 576,
                        "src": "15405:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 567,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "15405:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15404:14:0"
                  },
                  "scope": 577,
                  "src": "15354:230:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 5010,
              "src": "15212:374:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 579,
                    "name": "Context",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 577,
                    "src": "16982:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Context_$577",
                      "typeString": "contract Context"
                    }
                  },
                  "id": 580,
                  "nodeType": "InheritanceSpecifier",
                  "src": "16982:7:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 581,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "16991:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 582,
                  "nodeType": "InheritanceSpecifier",
                  "src": "16991:6:0"
                }
              ],
              "contractDependencies": [
                77,
                577
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 578,
                "nodeType": "StructuredDocumentation",
                "src": "15801: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": 1075,
              "linearizedBaseContracts": [
                1075,
                77,
                577
              ],
              "name": "ERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 585,
                  "libraryName": {
                    "contractScope": null,
                    "id": 583,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 379,
                    "src": "17010:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$379",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "17004:27:0",
                  "typeName": {
                    "id": 584,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17023:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 589,
                  "mutability": "mutable",
                  "name": "_balances",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1075,
                  "src": "17037:46:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 588,
                    "keyType": {
                      "id": 586,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "17046:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "17037:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 587,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "17057:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 595,
                  "mutability": "mutable",
                  "name": "_allowances",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1075,
                  "src": "17090: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": 594,
                    "keyType": {
                      "id": 590,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "17099:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "17090:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 593,
                      "keyType": {
                        "id": 591,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "17119:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "17110:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 592,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17130:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 597,
                  "mutability": "mutable",
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1075,
                  "src": "17166:28:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 596,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17166:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 599,
                  "mutability": "mutable",
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1075,
                  "src": "17201:20:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 598,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "17201:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 601,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1075,
                  "src": "17227:22:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 600,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "17227:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 603,
                  "mutability": "mutable",
                  "name": "_decimals",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1075,
                  "src": "17255:23:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 602,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "17255:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 623,
                    "nodeType": "Block",
                    "src": "17665:81:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 611,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 599,
                            "src": "17675:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 612,
                            "name": "name_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 606,
                            "src": "17683:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "17675:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 614,
                        "nodeType": "ExpressionStatement",
                        "src": "17675:13:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 615,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 601,
                            "src": "17698:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 616,
                            "name": "symbol_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 608,
                            "src": "17708:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "17698:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 618,
                        "nodeType": "ExpressionStatement",
                        "src": "17698:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 621,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 619,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 603,
                            "src": "17725:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3138",
                            "id": 620,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17737:2:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_18_by_1",
                              "typeString": "int_const 18"
                            },
                            "value": "18"
                          },
                          "src": "17725:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 622,
                        "nodeType": "ExpressionStatement",
                        "src": "17725:14:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 604,
                    "nodeType": "StructuredDocumentation",
                    "src": "17285: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": 624,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 609,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 606,
                        "mutability": "mutable",
                        "name": "name_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 624,
                        "src": "17614:19:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 605,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "17614:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 608,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 624,
                        "src": "17635:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 607,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "17635:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "17613:44:0"
                  },
                  "returnParameters": {
                    "id": 610,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17665:0:0"
                  },
                  "scope": 1075,
                  "src": "17601:145:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 632,
                    "nodeType": "Block",
                    "src": "17863:29:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 630,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 599,
                          "src": "17880:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 629,
                        "id": 631,
                        "nodeType": "Return",
                        "src": "17873:12:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 625,
                    "nodeType": "StructuredDocumentation",
                    "src": "17752:54:0",
                    "text": " @dev Returns the name of the token."
                  },
                  "functionSelector": "06fdde03",
                  "id": 633,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 626,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17824:2:0"
                  },
                  "returnParameters": {
                    "id": 629,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 628,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 633,
                        "src": "17848:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 627,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "17848:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "17847:15:0"
                  },
                  "scope": 1075,
                  "src": "17811:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 641,
                    "nodeType": "Block",
                    "src": "18059:31:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 639,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 601,
                          "src": "18076:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 638,
                        "id": 640,
                        "nodeType": "Return",
                        "src": "18069:14:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 634,
                    "nodeType": "StructuredDocumentation",
                    "src": "17898:102:0",
                    "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
                  },
                  "functionSelector": "95d89b41",
                  "id": 642,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 635,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18020:2:0"
                  },
                  "returnParameters": {
                    "id": 638,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 637,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 642,
                        "src": "18044:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 636,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "18044:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "18043:15:0"
                  },
                  "scope": 1075,
                  "src": "18005:85:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 650,
                    "nodeType": "Block",
                    "src": "18761:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 648,
                          "name": "_decimals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 603,
                          "src": "18778:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "functionReturnParameters": 647,
                        "id": 649,
                        "nodeType": "Return",
                        "src": "18771:16:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 643,
                    "nodeType": "StructuredDocumentation",
                    "src": "18096: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": 651,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 644,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18730:2:0"
                  },
                  "returnParameters": {
                    "id": 647,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 646,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 651,
                        "src": "18754:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 645,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "18754:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "18753:7:0"
                  },
                  "scope": 1075,
                  "src": "18713:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    8
                  ],
                  "body": {
                    "id": 660,
                    "nodeType": "Block",
                    "src": "18916:36:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 658,
                          "name": "_totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 597,
                          "src": "18933:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 657,
                        "id": 659,
                        "nodeType": "Return",
                        "src": "18926:19:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 652,
                    "nodeType": "StructuredDocumentation",
                    "src": "18800:49:0",
                    "text": " @dev See {IERC20-totalSupply}."
                  },
                  "functionSelector": "18160ddd",
                  "id": 661,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 654,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "18889:8:0"
                  },
                  "parameters": {
                    "id": 653,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18874:2:0"
                  },
                  "returnParameters": {
                    "id": 657,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 656,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 661,
                        "src": "18907:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 655,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18907:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "18906:9:0"
                  },
                  "scope": 1075,
                  "src": "18854:98:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    16
                  ],
                  "body": {
                    "id": 674,
                    "nodeType": "Block",
                    "src": "19085:42:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 670,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "19102:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 672,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 671,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 664,
                            "src": "19112:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19102:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 669,
                        "id": 673,
                        "nodeType": "Return",
                        "src": "19095:25:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 662,
                    "nodeType": "StructuredDocumentation",
                    "src": "18958:47:0",
                    "text": " @dev See {IERC20-balanceOf}."
                  },
                  "functionSelector": "70a08231",
                  "id": 675,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 666,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "19058:8:0"
                  },
                  "parameters": {
                    "id": 665,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 664,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 675,
                        "src": "19029:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 663,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19029:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19028:17:0"
                  },
                  "returnParameters": {
                    "id": 669,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 668,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 675,
                        "src": "19076:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 667,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19076:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19075:9:0"
                  },
                  "scope": 1075,
                  "src": "19010:117:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    26
                  ],
                  "body": {
                    "id": 695,
                    "nodeType": "Block",
                    "src": "19422:80:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 687,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 565,
                                "src": "19442:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 688,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19442:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 689,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 678,
                              "src": "19456:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 690,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 680,
                              "src": "19467: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": 686,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 896,
                            "src": "19432:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19432:42:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 692,
                        "nodeType": "ExpressionStatement",
                        "src": "19432:42:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19491:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 685,
                        "id": 694,
                        "nodeType": "Return",
                        "src": "19484:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 676,
                    "nodeType": "StructuredDocumentation",
                    "src": "19133: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": 696,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 682,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "19398:8:0"
                  },
                  "parameters": {
                    "id": 681,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 678,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 696,
                        "src": "19348:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 677,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19348:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 680,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 696,
                        "src": "19367:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 679,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19367:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19347:35:0"
                  },
                  "returnParameters": {
                    "id": 685,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 684,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 696,
                        "src": "19416:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 683,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "19416:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19415:6:0"
                  },
                  "scope": 1075,
                  "src": "19330:172:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    36
                  ],
                  "body": {
                    "id": 713,
                    "nodeType": "Block",
                    "src": "19658:51:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 707,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 595,
                              "src": "19675:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 709,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 708,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 699,
                              "src": "19687:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19675:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 711,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 710,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 701,
                            "src": "19694:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19675:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 706,
                        "id": 712,
                        "nodeType": "Return",
                        "src": "19668:34:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 697,
                    "nodeType": "StructuredDocumentation",
                    "src": "19508:47:0",
                    "text": " @dev See {IERC20-allowance}."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 714,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 703,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "19631:8:0"
                  },
                  "parameters": {
                    "id": 702,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 699,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 714,
                        "src": "19579:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 698,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19579:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 701,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 714,
                        "src": "19594:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 700,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19594:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19578:32:0"
                  },
                  "returnParameters": {
                    "id": 706,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 705,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 714,
                        "src": "19649:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 704,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19649:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19648:9:0"
                  },
                  "scope": 1075,
                  "src": "19560:149:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    46
                  ],
                  "body": {
                    "id": 734,
                    "nodeType": "Block",
                    "src": "19936:77:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 726,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 565,
                                "src": "19955:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 727,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19955:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 728,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 717,
                              "src": "19969:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 729,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 719,
                              "src": "19978: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": 725,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1052,
                            "src": "19946:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19946:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 731,
                        "nodeType": "ExpressionStatement",
                        "src": "19946:39:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20002:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 724,
                        "id": 733,
                        "nodeType": "Return",
                        "src": "19995:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 715,
                    "nodeType": "StructuredDocumentation",
                    "src": "19715:127:0",
                    "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 735,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 721,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "19912:8:0"
                  },
                  "parameters": {
                    "id": 720,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 717,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 735,
                        "src": "19864:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 716,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19864:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 719,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 735,
                        "src": "19881:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 718,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19881:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19863:33:0"
                  },
                  "returnParameters": {
                    "id": 724,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 723,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 735,
                        "src": "19930:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 722,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "19930:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19929:6:0"
                  },
                  "scope": 1075,
                  "src": "19847:166:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    58
                  ],
                  "body": {
                    "id": 772,
                    "nodeType": "Block",
                    "src": "20592:205:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 749,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 738,
                              "src": "20612:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 750,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 740,
                              "src": "20620:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 751,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 742,
                              "src": "20631: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": 748,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 896,
                            "src": "20602:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 752,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20602:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 753,
                        "nodeType": "ExpressionStatement",
                        "src": "20602:36:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 755,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 738,
                              "src": "20657:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 756,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 565,
                                "src": "20665:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 757,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "20665:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 765,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 742,
                                  "src": "20717:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365",
                                  "id": 766,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "20725: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": 758,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 595,
                                      "src": "20679:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 760,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 759,
                                      "name": "sender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 738,
                                      "src": "20691:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "20679:19:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 763,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 761,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 565,
                                      "src": "20699:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                        "typeString": "function () view returns (address payable)"
                                      }
                                    },
                                    "id": 762,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "20699:12:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "20679:33:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 764,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 257,
                                "src": "20679: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": 767,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "20679: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": 754,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1052,
                            "src": "20648:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20648:121:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 769,
                        "nodeType": "ExpressionStatement",
                        "src": "20648:121:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20786:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 747,
                        "id": 771,
                        "nodeType": "Return",
                        "src": "20779:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 736,
                    "nodeType": "StructuredDocumentation",
                    "src": "20019: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": 773,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 744,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "20568:8:0"
                  },
                  "parameters": {
                    "id": 743,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 738,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 773,
                        "src": "20502:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 737,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20502:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 740,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 773,
                        "src": "20518:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 739,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20518:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 742,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 773,
                        "src": "20537:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 741,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20537:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20501:51:0"
                  },
                  "returnParameters": {
                    "id": 747,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 746,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 773,
                        "src": "20586:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 745,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "20586:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20585:6:0"
                  },
                  "scope": 1075,
                  "src": "20480:317:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 800,
                    "nodeType": "Block",
                    "src": "21286:121:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 784,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 565,
                                "src": "21305:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 785,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21305:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 786,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 776,
                              "src": "21319:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 794,
                                  "name": "addedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 778,
                                  "src": "21367: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": 787,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 595,
                                      "src": "21328:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 790,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 788,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 565,
                                        "src": "21340:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                          "typeString": "function () view returns (address payable)"
                                        }
                                      },
                                      "id": 789,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "21340:12:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "21328:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 792,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 791,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 776,
                                    "src": "21354:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "21328:34:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 793,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 212,
                                "src": "21328: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": 795,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21328: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": 783,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1052,
                            "src": "21296:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 796,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21296:83:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 797,
                        "nodeType": "ExpressionStatement",
                        "src": "21296:83:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "21396:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 782,
                        "id": 799,
                        "nodeType": "Return",
                        "src": "21389:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 774,
                    "nodeType": "StructuredDocumentation",
                    "src": "20803: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": 801,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 779,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 776,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 801,
                        "src": "21219:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 775,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21219:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 778,
                        "mutability": "mutable",
                        "name": "addedValue",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 801,
                        "src": "21236:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 777,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21236:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21218:37:0"
                  },
                  "returnParameters": {
                    "id": 782,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 781,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 801,
                        "src": "21280:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 780,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "21280:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21279:6:0"
                  },
                  "scope": 1075,
                  "src": "21192:215:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 829,
                    "nodeType": "Block",
                    "src": "21993:167:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 812,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 565,
                                "src": "22012:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 813,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "22012:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 814,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 804,
                              "src": "22026:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 822,
                                  "name": "subtractedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 806,
                                  "src": "22074:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                  "id": 823,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "22091: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": 815,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 595,
                                      "src": "22035:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 818,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 816,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 565,
                                        "src": "22047:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                          "typeString": "function () view returns (address payable)"
                                        }
                                      },
                                      "id": 817,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "22047:12:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "22035:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 820,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 819,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 804,
                                    "src": "22061:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "22035:34:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 821,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 257,
                                "src": "22035: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": 824,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "22035: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": 811,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1052,
                            "src": "22003:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22003:129:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 826,
                        "nodeType": "ExpressionStatement",
                        "src": "22003:129:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 827,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "22149:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 810,
                        "id": 828,
                        "nodeType": "Return",
                        "src": "22142:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 802,
                    "nodeType": "StructuredDocumentation",
                    "src": "21413: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": 830,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 807,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 804,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 830,
                        "src": "21921:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 803,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21921:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 806,
                        "mutability": "mutable",
                        "name": "subtractedValue",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 830,
                        "src": "21938:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 805,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21938:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21920:42:0"
                  },
                  "returnParameters": {
                    "id": 810,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 809,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 830,
                        "src": "21987:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 808,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "21987:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21986:6:0"
                  },
                  "scope": 1075,
                  "src": "21894:266:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 895,
                    "nodeType": "Block",
                    "src": "22721:443:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 841,
                                "name": "sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 833,
                                "src": "22739:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 844,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22757: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": 843,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "22749:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 842,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "22749:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 845,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22749:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "22739:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                              "id": 847,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22761: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": 840,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "22731:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 848,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22731:70:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 849,
                        "nodeType": "ExpressionStatement",
                        "src": "22731:70:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 856,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 851,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 835,
                                "src": "22819:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 854,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22840: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": 853,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "22832:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 852,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "22832:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 855,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22832:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "22819:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                              "id": 857,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22844: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": 850,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "22811:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22811:71:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 859,
                        "nodeType": "ExpressionStatement",
                        "src": "22811:71:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 861,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 833,
                              "src": "22914:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 862,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 835,
                              "src": "22922:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 863,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 837,
                              "src": "22933: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": 860,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "22893:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22893:47:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 865,
                        "nodeType": "ExpressionStatement",
                        "src": "22893:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 866,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 589,
                              "src": "22951:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 868,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 867,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 833,
                              "src": "22961:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "22951:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 873,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 837,
                                "src": "22993:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                                "id": 874,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "23001: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": 869,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 589,
                                  "src": "22971:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 871,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 870,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 833,
                                  "src": "22981:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "22971:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 872,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 257,
                              "src": "22971: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": 875,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22971:71:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "22951:91:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 877,
                        "nodeType": "ExpressionStatement",
                        "src": "22951:91:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 878,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 589,
                              "src": "23052:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 880,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 879,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 835,
                              "src": "23062:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "23052:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 885,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 837,
                                "src": "23100:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 881,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 589,
                                  "src": "23075:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 883,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 882,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 835,
                                  "src": "23085:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "23075:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 884,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 212,
                              "src": "23075: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": 886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23075:32:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23052:55:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 888,
                        "nodeType": "ExpressionStatement",
                        "src": "23052:55:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 890,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 833,
                              "src": "23131:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 891,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 835,
                              "src": "23139:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 892,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 837,
                              "src": "23150: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": 889,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "23122:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 893,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23122:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 894,
                        "nodeType": "EmitStatement",
                        "src": "23117:40:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 831,
                    "nodeType": "StructuredDocumentation",
                    "src": "22166: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": 896,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 838,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 833,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 896,
                        "src": "22653:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 832,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "22653:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 835,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 896,
                        "src": "22669:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 834,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "22669:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 837,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 896,
                        "src": "22688:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 836,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22688:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "22652:51:0"
                  },
                  "returnParameters": {
                    "id": 839,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "22721:0:0"
                  },
                  "scope": 1075,
                  "src": "22634:530:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 950,
                    "nodeType": "Block",
                    "src": "23500:305:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 905,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 899,
                                "src": "23518:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 908,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "23537: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": 907,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "23529:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 906,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "23529:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 909,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "23529:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "23518:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                              "id": 911,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "23541: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": 904,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "23510:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23510:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 913,
                        "nodeType": "ExpressionStatement",
                        "src": "23510:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 917,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "23615: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": 916,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "23607:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 915,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "23607:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23607:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 919,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 899,
                              "src": "23619:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 920,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 901,
                              "src": "23628: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": 914,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "23586:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23586:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 922,
                        "nodeType": "ExpressionStatement",
                        "src": "23586:49:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 928,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 923,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 597,
                            "src": "23646:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 926,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 901,
                                "src": "23678:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 924,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 597,
                                "src": "23661:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 925,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 212,
                              "src": "23661: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": 927,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23661:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23646:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 929,
                        "nodeType": "ExpressionStatement",
                        "src": "23646:39:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 939,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 930,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 589,
                              "src": "23695:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 932,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 931,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 899,
                              "src": "23705:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "23695:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 937,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 901,
                                "src": "23739:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 933,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 589,
                                  "src": "23716:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 935,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 934,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 899,
                                  "src": "23726:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "23716:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 936,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 212,
                              "src": "23716: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": 938,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23716:30:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23695:51:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 940,
                        "nodeType": "ExpressionStatement",
                        "src": "23695:51:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 944,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "23778: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": 943,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "23770:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 942,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "23770:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 945,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23770:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 946,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 899,
                              "src": "23782:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 947,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 901,
                              "src": "23791: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": 941,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "23761:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 948,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23761:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 949,
                        "nodeType": "EmitStatement",
                        "src": "23756:42:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 897,
                    "nodeType": "StructuredDocumentation",
                    "src": "23170: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": 951,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 902,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 899,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 951,
                        "src": "23450:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 898,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23450:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 901,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 951,
                        "src": "23467:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 900,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "23467:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "23449:33:0"
                  },
                  "returnParameters": {
                    "id": 903,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "23500:0:0"
                  },
                  "scope": 1075,
                  "src": "23435:370:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1006,
                    "nodeType": "Block",
                    "src": "24190:345:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 960,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 954,
                                "src": "24208:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 963,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "24227: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": 962,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "24219:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 961,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "24219:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 964,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24219:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "24208:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                              "id": 966,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "24231: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": 959,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "24200:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 967,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24200:67:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 968,
                        "nodeType": "ExpressionStatement",
                        "src": "24200:67:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 970,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 954,
                              "src": "24299:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 973,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "24316: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": 972,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "24308:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 971,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "24308:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 974,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24308:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 975,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 956,
                              "src": "24320: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": 969,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "24278:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24278:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 977,
                        "nodeType": "ExpressionStatement",
                        "src": "24278:49:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 978,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 589,
                              "src": "24338:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 980,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 979,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 954,
                              "src": "24348:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "24338:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 985,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 956,
                                "src": "24382:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                                "id": 986,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "24390: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": 981,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 589,
                                  "src": "24359:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 983,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 982,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 954,
                                  "src": "24369:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24359:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 984,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 257,
                              "src": "24359: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": 987,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24359:68:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24338:89:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 989,
                        "nodeType": "ExpressionStatement",
                        "src": "24338:89:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 995,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 990,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 597,
                            "src": "24437:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 993,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 956,
                                "src": "24469:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 991,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 597,
                                "src": "24452:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 992,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 229,
                              "src": "24452: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": 994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24452:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24437:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 996,
                        "nodeType": "ExpressionStatement",
                        "src": "24437:39:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 998,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 954,
                              "src": "24500:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1001,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "24517: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": 1000,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "24509:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 999,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "24509:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1002,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24509:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1003,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 956,
                              "src": "24521: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": 997,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "24491:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24491:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1005,
                        "nodeType": "EmitStatement",
                        "src": "24486:42:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 952,
                    "nodeType": "StructuredDocumentation",
                    "src": "23811: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": 1007,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 957,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 954,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1007,
                        "src": "24140:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 953,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "24140:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 956,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1007,
                        "src": "24157:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 955,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24157:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24139:33:0"
                  },
                  "returnParameters": {
                    "id": 958,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "24190:0:0"
                  },
                  "scope": 1075,
                  "src": "24125:410:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1051,
                    "nodeType": "Block",
                    "src": "25041:257:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1023,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1018,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1010,
                                "src": "25059:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1021,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "25076: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": 1020,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "25068:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1019,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "25068:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1022,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25068:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "25059:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                              "id": 1024,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25080: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": 1017,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "25051:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25051:68:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1026,
                        "nodeType": "ExpressionStatement",
                        "src": "25051:68:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1033,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1028,
                                "name": "spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1012,
                                "src": "25137:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1031,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "25156: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": 1030,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "25148:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1029,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "25148:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25148:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "25137:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                              "id": 1034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25160: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": 1027,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "25129:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25129:68:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1036,
                        "nodeType": "ExpressionStatement",
                        "src": "25129:68:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1037,
                                "name": "_allowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 595,
                                "src": "25208:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1040,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1038,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1010,
                                "src": "25220:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "25208:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1041,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1039,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1012,
                              "src": "25227:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "25208:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1042,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1014,
                            "src": "25238:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25208:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1044,
                        "nodeType": "ExpressionStatement",
                        "src": "25208:36:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1046,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1010,
                              "src": "25268:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1047,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1012,
                              "src": "25275:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1048,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1014,
                              "src": "25284: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": 1045,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 76,
                            "src": "25259:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25259:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1050,
                        "nodeType": "EmitStatement",
                        "src": "25254:37:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1008,
                    "nodeType": "StructuredDocumentation",
                    "src": "24541: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": 1052,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1015,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1010,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1052,
                        "src": "24976:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1009,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "24976:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1012,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1052,
                        "src": "24991:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1011,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "24991:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1014,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1052,
                        "src": "25008:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1013,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25008:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24975:48:0"
                  },
                  "returnParameters": {
                    "id": 1016,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "25041:0:0"
                  },
                  "scope": 1075,
                  "src": "24958:340:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1062,
                    "nodeType": "Block",
                    "src": "25671:38:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1060,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1058,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 603,
                            "src": "25681:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1059,
                            "name": "decimals_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1055,
                            "src": "25693:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "25681:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 1061,
                        "nodeType": "ExpressionStatement",
                        "src": "25681:21:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1053,
                    "nodeType": "StructuredDocumentation",
                    "src": "25304: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": 1063,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setupDecimals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1056,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1055,
                        "mutability": "mutable",
                        "name": "decimals_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1063,
                        "src": "25645:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 1054,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "25645:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "25644:17:0"
                  },
                  "returnParameters": {
                    "id": 1057,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "25671:0:0"
                  },
                  "scope": 1075,
                  "src": "25621:88:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1073,
                    "nodeType": "Block",
                    "src": "26385:3:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 1064,
                    "nodeType": "StructuredDocumentation",
                    "src": "25715: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": 1074,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_beforeTokenTransfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1071,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1066,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1074,
                        "src": "26326:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1065,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "26326:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1068,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1074,
                        "src": "26340:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1067,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "26340:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1070,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1074,
                        "src": "26352:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1069,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26352:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26325:42:0"
                  },
                  "returnParameters": {
                    "id": 1072,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "26385:0:0"
                  },
                  "scope": 1075,
                  "src": "26296:92:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 5010,
              "src": "16964:9426:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1077,
                    "name": "IBasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 141,
                    "src": "27169:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBasicFDT_$141",
                      "typeString": "contract IBasicFDT"
                    }
                  },
                  "id": 1078,
                  "nodeType": "InheritanceSpecifier",
                  "src": "27169:9:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1079,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1075,
                    "src": "27180:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1075",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 1080,
                  "nodeType": "InheritanceSpecifier",
                  "src": "27180:5:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                577,
                1075
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 1076,
                "nodeType": "StructuredDocumentation",
                "src": "27045:94:0",
                "text": "@title BasicFDT implements the basic level FDT functionality for accounting for revenues."
              },
              "fullyImplemented": true,
              "id": 1447,
              "linearizedBaseContracts": [
                1447,
                1075,
                141,
                77,
                577
              ],
              "name": "BasicFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 1083,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1081,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 379,
                    "src": "27199:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$379",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "27193:33:0",
                  "typeName": {
                    "id": 1082,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27218:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 1086,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1084,
                    "name": "SafeMathUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 185,
                    "src": "27237:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathUint_$185",
                      "typeString": "library SafeMathUint"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "27231:33:0",
                  "typeName": {
                    "id": 1085,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27256:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 1089,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1087,
                    "name": "SignedSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 556,
                    "src": "27275:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignedSafeMath_$556",
                      "typeString": "library SignedSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "27269:33:0",
                  "typeName": {
                    "id": 1088,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27295:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "id": 1092,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1090,
                    "name": "SafeMathInt",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 162,
                    "src": "27313:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathInt_$162",
                      "typeString": "library SafeMathInt"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "27307:33:0",
                  "typeName": {
                    "id": 1091,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27333:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "constant": true,
                  "id": 1097,
                  "mutability": "constant",
                  "name": "pointsMultiplier",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1447,
                  "src": "27346:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1093,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27346: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": 1096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 1094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27391: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": 1095,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27396:3:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "128"
                    },
                    "src": "27391:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1099,
                  "mutability": "mutable",
                  "name": "pointsPerShare",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1447,
                  "src": "27405:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1098,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27405:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1103,
                  "mutability": "mutable",
                  "name": "pointsCorrection",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1447,
                  "src": "27443:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                    "typeString": "mapping(address => int256)"
                  },
                  "typeName": {
                    "id": 1102,
                    "keyType": {
                      "id": 1100,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "27451:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "27443:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                      "typeString": "mapping(address => int256)"
                    },
                    "valueType": {
                      "id": 1101,
                      "name": "int256",
                      "nodeType": "ElementaryTypeName",
                      "src": "27462:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1107,
                  "mutability": "mutable",
                  "name": "withdrawnFunds",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1447,
                  "src": "27502:51:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 1106,
                    "keyType": {
                      "id": 1104,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "27510:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "27502:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 1105,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "27521:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1118,
                    "nodeType": "Block",
                    "src": "27641:3:0",
                    "statements": []
                  },
                  "documentation": null,
                  "id": 1119,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1114,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1109,
                          "src": "27620:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1115,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1111,
                          "src": "27626:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 1116,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 1113,
                        "name": "ERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1075,
                        "src": "27614:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20_$1075_$",
                          "typeString": "type(contract ERC20)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "27614:19:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1109,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1119,
                        "src": "27572:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1108,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "27572:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1111,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1119,
                        "src": "27592:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1110,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "27592:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "27571:42:0"
                  },
                  "returnParameters": {
                    "id": 1117,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "27641:0:0"
                  },
                  "scope": 1447,
                  "src": "27560:84:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1161,
                    "nodeType": "Block",
                    "src": "28576:288:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1126,
                                  "name": "totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 661,
                                  "src": "28594:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 1127,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "28594:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1128,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "28610:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "28594:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4644543a5a45524f5f535550504c59",
                              "id": 1130,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "28613: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": 1125,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "28586:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1131,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28586:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1132,
                        "nodeType": "ExpressionStatement",
                        "src": "28586:45:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1135,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1133,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1122,
                            "src": "28646:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1134,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "28655:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "28646:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1137,
                        "nodeType": "IfStatement",
                        "src": "28642:23:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 1124,
                          "id": 1136,
                          "nodeType": "Return",
                          "src": "28658:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1138,
                            "name": "pointsPerShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1099,
                            "src": "28675:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1147,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1143,
                                      "name": "pointsMultiplier",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1097,
                                      "src": "28721:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1141,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1122,
                                      "src": "28711:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1142,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 292,
                                    "src": "28711: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": 1144,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "28711:27:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 1145,
                                    "name": "totalSupply",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 661,
                                    "src": "28741:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view returns (uint256)"
                                    }
                                  },
                                  "id": 1146,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "28741:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "28711:43:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1139,
                                "name": "pointsPerShare",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1099,
                                "src": "28692:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1140,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 212,
                              "src": "28692: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": 1148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28692:63:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28675:80:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1150,
                        "nodeType": "ExpressionStatement",
                        "src": "28675:80:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1152,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "28787:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1153,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "28787:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1154,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1122,
                              "src": "28799:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1151,
                            "name": "FundsDistributed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 87,
                            "src": "28770:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1155,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28770:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1156,
                        "nodeType": "EmitStatement",
                        "src": "28765:40:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1158,
                              "name": "pointsPerShare",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1099,
                              "src": "28842:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1157,
                            "name": "PointsPerShareUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 101,
                            "src": "28820:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1159,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28820:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1160,
                        "nodeType": "EmitStatement",
                        "src": "28815:42:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1120,
                    "nodeType": "StructuredDocumentation",
                    "src": "27650: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": 1162,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_distributeFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1123,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1122,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1162,
                        "src": "28552:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1121,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28552:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "28551:15:0"
                  },
                  "returnParameters": {
                    "id": 1124,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "28576:0:0"
                  },
                  "scope": 1447,
                  "src": "28526:338:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1199,
                    "nodeType": "Block",
                    "src": "29203:303:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1168,
                            "name": "withdrawableDividend",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1166,
                            "src": "29213:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1170,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "29262:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1171,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "29262:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "id": 1169,
                              "name": "withdrawableFundsOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1218,
                              "src": "29242:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 1172,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29242:31:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29213:60:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1174,
                        "nodeType": "ExpressionStatement",
                        "src": "29213:60:0"
                      },
                      {
                        "assignments": [
                          1176
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1176,
                            "mutability": "mutable",
                            "name": "_withdrawnFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1199,
                            "src": "29283:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1175,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29283:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1184,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1182,
                              "name": "withdrawableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1166,
                              "src": "29343:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1177,
                                "name": "withdrawnFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1107,
                                "src": "29312:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1180,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1178,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "29327:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1179,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "29327:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "29312:26:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1181,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 212,
                            "src": "29312: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": 1183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29312:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29283:81:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1185,
                              "name": "withdrawnFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1107,
                              "src": "29374:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1188,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1186,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "29389:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1187,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29389:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "29374:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1189,
                            "name": "_withdrawnFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1176,
                            "src": "29403:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29374:44:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1191,
                        "nodeType": "ExpressionStatement",
                        "src": "29374:44:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1193,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "29449:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1194,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29449:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1195,
                              "name": "withdrawableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1166,
                              "src": "29461:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1196,
                              "name": "_withdrawnFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1176,
                              "src": "29483: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": 1192,
                            "name": "FundsWithdrawn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 96,
                            "src": "29434:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 1197,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29434:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1198,
                        "nodeType": "EmitStatement",
                        "src": "29429:70:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1163,
                    "nodeType": "StructuredDocumentation",
                    "src": "28870: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": 1200,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_prepareWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1164,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "29152:2:0"
                  },
                  "returnParameters": {
                    "id": 1167,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1166,
                        "mutability": "mutable",
                        "name": "withdrawableDividend",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1200,
                        "src": "29173:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1165,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29173:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29172:30:0"
                  },
                  "scope": 1447,
                  "src": "29127:379:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    116
                  ],
                  "body": {
                    "id": 1217,
                    "nodeType": "Block",
                    "src": "29596:79:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1212,
                                "name": "withdrawnFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1107,
                                "src": "29645:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1214,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1213,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1202,
                                "src": "29660:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "29645:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1209,
                                  "name": "_owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1202,
                                  "src": "29633:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1208,
                                "name": "accumulativeFundsOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1258,
                                "src": "29613:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 1210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "29613:27:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1211,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 229,
                            "src": "29613: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": 1215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29613:55:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1207,
                        "id": 1216,
                        "nodeType": "Return",
                        "src": "29606:62:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "443bb293",
                  "id": 1218,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawableFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1204,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "29569:8:0"
                  },
                  "parameters": {
                    "id": 1203,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1202,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1218,
                        "src": "29541:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1201,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "29541:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29540:16:0"
                  },
                  "returnParameters": {
                    "id": 1207,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1206,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1218,
                        "src": "29587:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1205,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29587:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29586:9:0"
                  },
                  "scope": 1447,
                  "src": "29512:163:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    128
                  ],
                  "body": {
                    "id": 1230,
                    "nodeType": "Block",
                    "src": "29764:46:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1226,
                            "name": "withdrawnFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1107,
                            "src": "29781:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1228,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1227,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1220,
                            "src": "29796:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29781:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1225,
                        "id": 1229,
                        "nodeType": "Return",
                        "src": "29774:29:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "0041c52c",
                  "id": 1231,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawnFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1222,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "29732:8:0"
                  },
                  "parameters": {
                    "id": 1221,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1220,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1231,
                        "src": "29707:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1219,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "29707:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29706:16:0"
                  },
                  "returnParameters": {
                    "id": 1225,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1224,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1231,
                        "src": "29755:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1223,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29755:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29754:9:0"
                  },
                  "scope": 1447,
                  "src": "29681:129:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    136
                  ],
                  "body": {
                    "id": 1257,
                    "nodeType": "Block",
                    "src": "29900:221:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1248,
                                      "name": "pointsCorrection",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1103,
                                      "src": "30037:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                        "typeString": "mapping(address => int256)"
                                      }
                                    },
                                    "id": 1250,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1249,
                                      "name": "_owner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1233,
                                      "src": "30054:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "30037: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": 1242,
                                                "name": "_owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1233,
                                                "src": "29975:6:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "id": 1241,
                                              "name": "balanceOf",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 675,
                                              "src": "29965:9:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view returns (uint256)"
                                              }
                                            },
                                            "id": 1243,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "29965:17:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1239,
                                            "name": "pointsPerShare",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1099,
                                            "src": "29929:14:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 1240,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 292,
                                          "src": "29929: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": 1244,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "29929:54:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1245,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toInt256Safe",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 184,
                                      "src": "29929:84:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (int256)"
                                      }
                                    },
                                    "id": 1246,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "29929:86:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "id": 1247,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 555,
                                  "src": "29929: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": 1251,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29929:133:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 1252,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint256Safe",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 161,
                              "src": "29929:164:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                "typeString": "function (int256) pure returns (uint256)"
                              }
                            },
                            "id": 1253,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29929:166:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1254,
                            "name": "pointsMultiplier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1097,
                            "src": "30098:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29929:185:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1238,
                        "id": 1256,
                        "nodeType": "Return",
                        "src": "29910:204:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "4e97415f",
                  "id": 1258,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1235,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "29868:8:0"
                  },
                  "parameters": {
                    "id": 1234,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1233,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1258,
                        "src": "29845:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1232,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "29845:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29844:16:0"
                  },
                  "returnParameters": {
                    "id": 1238,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1237,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1258,
                        "src": "29891:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1236,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29891:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29890:9:0"
                  },
                  "scope": 1447,
                  "src": "29816:305:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    896
                  ],
                  "body": {
                    "id": 1326,
                    "nodeType": "Block",
                    "src": "30628:541:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1272,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1261,
                              "src": "30654:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1273,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1263,
                              "src": "30660:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1274,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1265,
                              "src": "30664: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": 1269,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "30638:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_BasicFDT_$1447",
                                "typeString": "contract super BasicFDT"
                              }
                            },
                            "id": 1271,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 896,
                            "src": "30638:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30638:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1276,
                        "nodeType": "ExpressionStatement",
                        "src": "30638:32:0"
                      },
                      {
                        "assignments": [
                          1278
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1278,
                            "mutability": "mutable",
                            "name": "_magCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1326,
                            "src": "30681:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1277,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "30681:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1285,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1281,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1265,
                                  "src": "30730:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1279,
                                  "name": "pointsPerShare",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1099,
                                  "src": "30711:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1280,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 292,
                                "src": "30711: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": 1282,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30711:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1283,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toInt256Safe",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 184,
                            "src": "30711:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (int256)"
                            }
                          },
                          "id": 1284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30711:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "30681:70:0"
                      },
                      {
                        "assignments": [
                          1287
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1287,
                            "mutability": "mutable",
                            "name": "pointsCorrectionFrom",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1326,
                            "src": "30761:27:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1286,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "30761:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1294,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1292,
                              "name": "_magCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1278,
                              "src": "30818:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1288,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1103,
                                "src": "30791:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1290,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1289,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1261,
                                "src": "30808:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "30791:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1291,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 555,
                            "src": "30791: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": 1293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30791:42:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "30761:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1295,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1103,
                              "src": "30843:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1297,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1296,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1261,
                              "src": "30860:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "30843:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1298,
                            "name": "pointsCorrectionFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1287,
                            "src": "30873:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "30843:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1300,
                        "nodeType": "ExpressionStatement",
                        "src": "30843:50:0"
                      },
                      {
                        "assignments": [
                          1302
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1302,
                            "mutability": "mutable",
                            "name": "pointsCorrectionTo",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1326,
                            "src": "30903:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1301,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "30903:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1309,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1307,
                              "name": "_magCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1278,
                              "src": "30958:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1303,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1103,
                                "src": "30933:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1305,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1304,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1263,
                                "src": "30950:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "30933:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1306,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 515,
                            "src": "30933: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": 1308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30933:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "30903:70:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1310,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1103,
                              "src": "30983:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1312,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1311,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1263,
                              "src": "31000:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "30983:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1313,
                            "name": "pointsCorrectionTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1302,
                            "src": "31013:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "30983:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1315,
                        "nodeType": "ExpressionStatement",
                        "src": "30983:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1317,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1261,
                              "src": "31071:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1318,
                              "name": "pointsCorrectionFrom",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1287,
                              "src": "31077:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1316,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "31047:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31047:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1320,
                        "nodeType": "EmitStatement",
                        "src": "31042:56:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1322,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1263,
                              "src": "31137:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1323,
                              "name": "pointsCorrectionTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1302,
                              "src": "31143:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1321,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "31113:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31113:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1325,
                        "nodeType": "EmitStatement",
                        "src": "31108:54:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1259,
                    "nodeType": "StructuredDocumentation",
                    "src": "30127: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": 1327,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1267,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "30619:8:0"
                  },
                  "parameters": {
                    "id": 1266,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1261,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1327,
                        "src": "30540:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1260,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "30540:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1263,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1327,
                        "src": "30562:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1262,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "30562:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1265,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1327,
                        "src": "30582:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1264,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30582:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "30530:71:0"
                  },
                  "returnParameters": {
                    "id": 1268,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "30628:0:0"
                  },
                  "scope": 1447,
                  "src": "30512:657:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    951
                  ],
                  "body": {
                    "id": 1369,
                    "nodeType": "Block",
                    "src": "31486:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1339,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1330,
                              "src": "31508:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1340,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1332,
                              "src": "31517:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1336,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "31496:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_BasicFDT_$1447",
                                "typeString": "contract super BasicFDT"
                              }
                            },
                            "id": 1338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_mint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 951,
                            "src": "31496:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1341,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31496:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1342,
                        "nodeType": "ExpressionStatement",
                        "src": "31496:27:0"
                      },
                      {
                        "assignments": [
                          1344
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1344,
                            "mutability": "mutable",
                            "name": "_pointsCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1369,
                            "src": "31534:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1343,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "31534:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1357,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1351,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1332,
                                          "src": "31624:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1349,
                                          "name": "pointsPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1099,
                                          "src": "31605:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1350,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 292,
                                        "src": "31605: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": 1352,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "31605:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1353,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "31604:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1354,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 184,
                                "src": "31604:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 1355,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "31604:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1345,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1103,
                                "src": "31561:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1347,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1346,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1330,
                                "src": "31578:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "31561:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1348,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 515,
                            "src": "31561: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": 1356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31561:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "31534:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1362,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1358,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1103,
                              "src": "31667:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1360,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1359,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1330,
                              "src": "31684:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "31667:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1361,
                            "name": "_pointsCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1344,
                            "src": "31695:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "31667:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1363,
                        "nodeType": "ExpressionStatement",
                        "src": "31667:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1365,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1330,
                              "src": "31752:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1366,
                              "name": "_pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1344,
                              "src": "31761:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1364,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "31728:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31728:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1368,
                        "nodeType": "EmitStatement",
                        "src": "31723:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1328,
                    "nodeType": "StructuredDocumentation",
                    "src": "31175: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": 1370,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1334,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "31477:8:0"
                  },
                  "parameters": {
                    "id": 1333,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1330,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1370,
                        "src": "31428:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1329,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "31428:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1332,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1370,
                        "src": "31445:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1331,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31445:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "31427:32:0"
                  },
                  "returnParameters": {
                    "id": 1335,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "31486:0:0"
                  },
                  "scope": 1447,
                  "src": "31413:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1007
                  ],
                  "body": {
                    "id": 1412,
                    "nodeType": "Block",
                    "src": "32171:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1382,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1373,
                              "src": "32193:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1383,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1375,
                              "src": "32202:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1379,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "32181:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_BasicFDT_$1447",
                                "typeString": "contract super BasicFDT"
                              }
                            },
                            "id": 1381,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_burn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1007,
                            "src": "32181:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1384,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32181:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1385,
                        "nodeType": "ExpressionStatement",
                        "src": "32181:27:0"
                      },
                      {
                        "assignments": [
                          1387
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1387,
                            "mutability": "mutable",
                            "name": "_pointsCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1412,
                            "src": "32219:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1386,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "32219:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1400,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1394,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1375,
                                          "src": "32309:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1392,
                                          "name": "pointsPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1099,
                                          "src": "32290:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1393,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 292,
                                        "src": "32290: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": 1395,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "32290:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1396,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "32289:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 184,
                                "src": "32289:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 1398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "32289:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1388,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1103,
                                "src": "32246:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1390,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1389,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1373,
                                "src": "32263:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "32246:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1391,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 555,
                            "src": "32246: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": 1399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32246:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32219:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1405,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1401,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1103,
                              "src": "32352:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1403,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1402,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1373,
                              "src": "32369:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "32352:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1404,
                            "name": "_pointsCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1387,
                            "src": "32380:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "32352:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1406,
                        "nodeType": "ExpressionStatement",
                        "src": "32352:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1408,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1373,
                              "src": "32437:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1409,
                              "name": "_pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1387,
                              "src": "32446:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1407,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "32413:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32413:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1411,
                        "nodeType": "EmitStatement",
                        "src": "32408:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1371,
                    "nodeType": "StructuredDocumentation",
                    "src": "31792: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": 1413,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1377,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "32162:8:0"
                  },
                  "parameters": {
                    "id": 1376,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1373,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1413,
                        "src": "32113:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1372,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "32113:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1375,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1413,
                        "src": "32130:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1374,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32130:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "32112:32:0"
                  },
                  "returnParameters": {
                    "id": 1378,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "32171:0:0"
                  },
                  "scope": 1447,
                  "src": "32098:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": {
                    "id": 1417,
                    "nodeType": "Block",
                    "src": "32526:2:0",
                    "statements": []
                  },
                  "documentation": null,
                  "functionSelector": "24600fc3",
                  "id": 1418,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1415,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "32517:8:0"
                  },
                  "parameters": {
                    "id": 1414,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "32499:2:0"
                  },
                  "returnParameters": {
                    "id": 1416,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "32526:0:0"
                  },
                  "scope": 1447,
                  "src": "32477:51:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1424,
                    "nodeType": "Block",
                    "src": "32849:2:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 1419,
                    "nodeType": "StructuredDocumentation",
                    "src": "32534: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": 1425,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateFundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1420,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "32812:2:0"
                  },
                  "returnParameters": {
                    "id": 1423,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1422,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1425,
                        "src": "32841:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1421,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32841:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "32840:8:0"
                  },
                  "scope": 1447,
                  "src": "32779:72:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    140
                  ],
                  "body": {
                    "id": 1445,
                    "nodeType": "Block",
                    "src": "32912:150:0",
                    "statements": [
                      {
                        "assignments": [
                          1430
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1430,
                            "mutability": "mutable",
                            "name": "newFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1445,
                            "src": "32922:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1429,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "32922:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1433,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1431,
                            "name": "_updateFundsTokenBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1425,
                            "src": "32940:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 1432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32940:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32922:44:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 1436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1434,
                            "name": "newFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1430,
                            "src": "32981:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1435,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "32993:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "32981:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1438,
                        "nodeType": "IfStatement",
                        "src": "32977:26:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 1428,
                          "id": 1437,
                          "nodeType": "Return",
                          "src": "32996:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1440,
                                  "name": "newFunds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1430,
                                  "src": "33030:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 1441,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toUint256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 161,
                                "src": "33030:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                  "typeString": "function (int256) pure returns (uint256)"
                                }
                              },
                              "id": 1442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "33030:24:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1439,
                            "name": "_distributeFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1162,
                            "src": "33013:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33013:42:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1444,
                        "nodeType": "ExpressionStatement",
                        "src": "33013:42:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "46c162de",
                  "id": 1446,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateFundsReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1427,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "32895:8:0"
                  },
                  "parameters": {
                    "id": 1426,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "32885:2:0"
                  },
                  "returnParameters": {
                    "id": 1428,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "32912:0:0"
                  },
                  "scope": 1447,
                  "src": "32857:205:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 5010,
              "src": "27139:5926:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1449,
                    "name": "IBasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 141,
                    "src": "33337:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBasicFDT_$141",
                      "typeString": "contract IBasicFDT"
                    }
                  },
                  "id": 1450,
                  "nodeType": "InheritanceSpecifier",
                  "src": "33337:9:0"
                }
              ],
              "contractDependencies": [
                77,
                141
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 1448,
                "nodeType": "StructuredDocumentation",
                "src": "33228:83:0",
                "text": "@title ExtendedFDT implements the FDT functionality for accounting for losses."
              },
              "fullyImplemented": false,
              "id": 1507,
              "linearizedBaseContracts": [
                1507,
                141,
                77
              ],
              "name": "IExtendedFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1451,
                    "nodeType": "StructuredDocumentation",
                    "src": "33354: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": 1455,
                  "name": "LossesPerShareUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1454,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1453,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1455,
                        "src": "33566:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1452,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "33566:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "33565:9:0"
                  },
                  "src": "33538:37:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1456,
                    "nodeType": "StructuredDocumentation",
                    "src": "33581: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": 1462,
                  "name": "LossesCorrectionUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1461,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1458,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1462,
                        "src": "33851:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1457,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "33851:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1460,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1462,
                        "src": "33868:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1459,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "33868:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "33850:25:0"
                  },
                  "src": "33821:55:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1463,
                    "nodeType": "StructuredDocumentation",
                    "src": "33882: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": 1469,
                  "name": "LossesDistributed",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1468,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1465,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1469,
                        "src": "34154:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1464,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "34154:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1467,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1469,
                        "src": "34171:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1466,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34171:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "34153:26:0"
                  },
                  "src": "34130:50:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1470,
                    "nodeType": "StructuredDocumentation",
                    "src": "34186: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": 1478,
                  "name": "LossesRecognized",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1477,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1472,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1478,
                        "src": "34542:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1471,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "34542:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1474,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1478,
                        "src": "34559:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1473,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34559:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1476,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1478,
                        "src": "34568:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1475,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34568:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "34541:35:0"
                  },
                  "src": "34519:58:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1479,
                    "nodeType": "StructuredDocumentation",
                    "src": "34583: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": 1486,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizableLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1482,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1481,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1486,
                        "src": "34823:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1480,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "34823:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "34822:16:0"
                  },
                  "returnParameters": {
                    "id": 1485,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1484,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1486,
                        "src": "34862:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1483,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34862:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "34861:9:0"
                  },
                  "scope": 1507,
                  "src": "34793:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1487,
                    "nodeType": "StructuredDocumentation",
                    "src": "34877: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": 1494,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizedLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1490,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1489,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1494,
                        "src": "35119:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1488,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "35119:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "35118:16:0"
                  },
                  "returnParameters": {
                    "id": 1493,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1492,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1494,
                        "src": "35158:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1491,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "35158:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "35157:9:0"
                  },
                  "scope": 1507,
                  "src": "35091:76:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1495,
                    "nodeType": "StructuredDocumentation",
                    "src": "35173: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": 1502,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1498,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1497,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1502,
                        "src": "35636:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1496,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "35636:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "35635:16:0"
                  },
                  "returnParameters": {
                    "id": 1501,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1500,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1502,
                        "src": "35675:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1499,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "35675:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "35674:9:0"
                  },
                  "scope": 1507,
                  "src": "35606:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1503,
                    "nodeType": "StructuredDocumentation",
                    "src": "35690: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": 1506,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLossesReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1504,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "36078:2:0"
                  },
                  "returnParameters": {
                    "id": 1505,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "36089:0:0"
                  },
                  "scope": 1507,
                  "src": "36049:41:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5010,
              "src": "33311:2782:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1509,
                    "name": "IExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1507,
                    "src": "36480:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExtendedFDT_$1507",
                      "typeString": "contract IExtendedFDT"
                    }
                  },
                  "id": 1510,
                  "nodeType": "InheritanceSpecifier",
                  "src": "36480:12:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1511,
                    "name": "BasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1447,
                    "src": "36494:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BasicFDT_$1447",
                      "typeString": "contract BasicFDT"
                    }
                  },
                  "id": 1512,
                  "nodeType": "InheritanceSpecifier",
                  "src": "36494:8:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                577,
                1075,
                1447,
                1507
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 1508,
                "nodeType": "StructuredDocumentation",
                "src": "36364:83:0",
                "text": "@title ExtendedFDT implements the FDT functionality for accounting for losses."
              },
              "fullyImplemented": true,
              "id": 1880,
              "linearizedBaseContracts": [
                1880,
                1447,
                1075,
                1507,
                141,
                77,
                577
              ],
              "name": "ExtendedFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 1515,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1513,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 379,
                    "src": "36516:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$379",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "36510:33:0",
                  "typeName": {
                    "id": 1514,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36535:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 1518,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1516,
                    "name": "SafeMathUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 185,
                    "src": "36554:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathUint_$185",
                      "typeString": "library SafeMathUint"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "36548:33:0",
                  "typeName": {
                    "id": 1517,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36573:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 1521,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1519,
                    "name": "SignedSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 556,
                    "src": "36592:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignedSafeMath_$556",
                      "typeString": "library SignedSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "36586:33:0",
                  "typeName": {
                    "id": 1520,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36612:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "id": 1524,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1522,
                    "name": "SafeMathInt",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 162,
                    "src": "36630:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathInt_$162",
                      "typeString": "library SafeMathInt"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "36624:33:0",
                  "typeName": {
                    "id": 1523,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36650:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 1526,
                  "mutability": "mutable",
                  "name": "lossesPerShare",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1880,
                  "src": "36663:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1525,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36663:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1530,
                  "mutability": "mutable",
                  "name": "lossesCorrection",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1880,
                  "src": "36701:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                    "typeString": "mapping(address => int256)"
                  },
                  "typeName": {
                    "id": 1529,
                    "keyType": {
                      "id": 1527,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "36709:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "36701:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                      "typeString": "mapping(address => int256)"
                    },
                    "valueType": {
                      "id": 1528,
                      "name": "int256",
                      "nodeType": "ElementaryTypeName",
                      "src": "36720:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1534,
                  "mutability": "mutable",
                  "name": "recognizedLosses",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1880,
                  "src": "36760:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 1533,
                    "keyType": {
                      "id": 1531,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "36768:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "36760:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 1532,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "36779:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1545,
                    "nodeType": "Block",
                    "src": "36904:3:0",
                    "statements": []
                  },
                  "documentation": null,
                  "id": 1546,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1541,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1536,
                          "src": "36883:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1542,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1538,
                          "src": "36889:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 1543,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 1540,
                        "name": "BasicFDT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1447,
                        "src": "36874:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BasicFDT_$1447_$",
                          "typeString": "type(contract BasicFDT)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "36874:22:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1539,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1536,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1546,
                        "src": "36832:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1535,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "36832:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1538,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1546,
                        "src": "36852:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1537,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "36852:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "36831:42:0"
                  },
                  "returnParameters": {
                    "id": 1544,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "36904:0:0"
                  },
                  "scope": 1880,
                  "src": "36820:87:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1592,
                    "nodeType": "Block",
                    "src": "37834:351:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1556,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1553,
                                  "name": "totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 661,
                                  "src": "37852:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 1554,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "37852:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1555,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "37868:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "37852:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4644543a5a45524f5f535550504c59",
                              "id": 1557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "37871: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": 1552,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "37844:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37844:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1559,
                        "nodeType": "ExpressionStatement",
                        "src": "37844:45:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1562,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1560,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1549,
                            "src": "37904:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1561,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "37913:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "37904:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1564,
                        "nodeType": "IfStatement",
                        "src": "37900:23:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 1551,
                          "id": 1563,
                          "nodeType": "Return",
                          "src": "37916:7:0"
                        }
                      },
                      {
                        "assignments": [
                          1566
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1566,
                            "mutability": "mutable",
                            "name": "_lossesPerShare",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1592,
                            "src": "37933:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1565,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "37933:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1577,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1575,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1571,
                                    "name": "pointsMultiplier",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1097,
                                    "src": "37988:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1569,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1549,
                                    "src": "37978:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1570,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 292,
                                  "src": "37978: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": 1572,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "37978:27:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1573,
                                  "name": "totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 661,
                                  "src": "38008:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 1574,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "38008:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "37978:43:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1567,
                              "name": "lossesPerShare",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1526,
                              "src": "37959:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1568,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 212,
                            "src": "37959: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": 1576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37959:63:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "37933:89:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1578,
                            "name": "lossesPerShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1526,
                            "src": "38032:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1579,
                            "name": "_lossesPerShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1566,
                            "src": "38058:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "38032:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1581,
                        "nodeType": "ExpressionStatement",
                        "src": "38032:41:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1583,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "38107:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1584,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38107:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1585,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1549,
                              "src": "38119:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1582,
                            "name": "LossesDistributed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1469,
                            "src": "38089:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1586,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38089:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1587,
                        "nodeType": "EmitStatement",
                        "src": "38084:41:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1589,
                              "name": "_lossesPerShare",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1566,
                              "src": "38162:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1588,
                            "name": "LossesPerShareUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1455,
                            "src": "38140:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38140:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1591,
                        "nodeType": "EmitStatement",
                        "src": "38135:43:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1547,
                    "nodeType": "StructuredDocumentation",
                    "src": "36913: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": 1593,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_distributeLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1550,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1549,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1593,
                        "src": "37810:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1548,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "37810:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37809:15:0"
                  },
                  "returnParameters": {
                    "id": 1551,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "37834:0:0"
                  },
                  "scope": 1880,
                  "src": "37783:402:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1630,
                    "nodeType": "Block",
                    "src": "38534:311:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1604,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1599,
                            "name": "recognizableDividend",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1597,
                            "src": "38544:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1601,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "38588:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1602,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "38588:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "id": 1600,
                              "name": "recognizableLossesOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1649,
                              "src": "38567:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 1603,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "38567:32:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "38544:55:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1605,
                        "nodeType": "ExpressionStatement",
                        "src": "38544:55:0"
                      },
                      {
                        "assignments": [
                          1607
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1607,
                            "mutability": "mutable",
                            "name": "_recognizedLosses",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1630,
                            "src": "38610:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1606,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "38610:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1615,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1613,
                              "name": "recognizableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1597,
                              "src": "38674:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1608,
                                "name": "recognizedLosses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1534,
                                "src": "38641:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1611,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1609,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "38658:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1610,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "38658:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "38641:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1612,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 212,
                            "src": "38641: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": 1614,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38641:54:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "38610:85:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1621,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1616,
                              "name": "recognizedLosses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1534,
                              "src": "38705:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1619,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1617,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "38722:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1618,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38722:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "38705:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1620,
                            "name": "_recognizedLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1607,
                            "src": "38736:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "38705:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1622,
                        "nodeType": "ExpressionStatement",
                        "src": "38705:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1624,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "38786:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1625,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38786:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1626,
                              "name": "recognizableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1597,
                              "src": "38798:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1627,
                              "name": "_recognizedLosses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1607,
                              "src": "38820: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": 1623,
                            "name": "LossesRecognized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1478,
                            "src": "38769:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 1628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38769:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1629,
                        "nodeType": "EmitStatement",
                        "src": "38764:74:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1594,
                    "nodeType": "StructuredDocumentation",
                    "src": "38191: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": 1631,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_prepareLossesWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1595,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "38483:2:0"
                  },
                  "returnParameters": {
                    "id": 1598,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1597,
                        "mutability": "mutable",
                        "name": "recognizableDividend",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1631,
                        "src": "38504:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1596,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "38504:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38503:30:0"
                  },
                  "scope": 1880,
                  "src": "38452:393:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1486
                  ],
                  "body": {
                    "id": 1648,
                    "nodeType": "Block",
                    "src": "38936:82:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1643,
                                "name": "recognizedLosses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1534,
                                "src": "38986:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1645,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1644,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1633,
                                "src": "39003:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "38986:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1640,
                                  "name": "_owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1633,
                                  "src": "38974:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1639,
                                "name": "accumulativeLossesOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1689,
                                "src": "38953:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 1641,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38953:28:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1642,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 229,
                            "src": "38953: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": 1646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38953:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1638,
                        "id": 1647,
                        "nodeType": "Return",
                        "src": "38946:65:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "66967791",
                  "id": 1649,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizableLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1635,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "38904:8:0"
                  },
                  "parameters": {
                    "id": 1634,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1633,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1649,
                        "src": "38881:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1632,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38881:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38880:16:0"
                  },
                  "returnParameters": {
                    "id": 1638,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1637,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1649,
                        "src": "38927:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1636,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "38927:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38926:9:0"
                  },
                  "scope": 1880,
                  "src": "38851:167:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1494
                  ],
                  "body": {
                    "id": 1661,
                    "nodeType": "Block",
                    "src": "39109:48:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1657,
                            "name": "recognizedLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1534,
                            "src": "39126:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1659,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1658,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1651,
                            "src": "39143:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "39126:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1656,
                        "id": 1660,
                        "nodeType": "Return",
                        "src": "39119:31:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "aed4966a",
                  "id": 1662,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizedLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1653,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "39077:8:0"
                  },
                  "parameters": {
                    "id": 1652,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1651,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1662,
                        "src": "39052:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1650,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "39052:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39051:16:0"
                  },
                  "returnParameters": {
                    "id": 1656,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1655,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1662,
                        "src": "39100:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1654,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "39100:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39099:9:0"
                  },
                  "scope": 1880,
                  "src": "39024:133:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    1502
                  ],
                  "body": {
                    "id": 1688,
                    "nodeType": "Block",
                    "src": "39248:221:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1679,
                                      "name": "lossesCorrection",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1530,
                                      "src": "39385:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                        "typeString": "mapping(address => int256)"
                                      }
                                    },
                                    "id": 1681,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1680,
                                      "name": "_owner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1664,
                                      "src": "39402:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "39385: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": 1673,
                                                "name": "_owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1664,
                                                "src": "39323:6:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "id": 1672,
                                              "name": "balanceOf",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 675,
                                              "src": "39313:9:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view returns (uint256)"
                                              }
                                            },
                                            "id": 1674,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "39313:17:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1670,
                                            "name": "lossesPerShare",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1526,
                                            "src": "39277:14:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 1671,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 292,
                                          "src": "39277: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": 1675,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "39277:54:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1676,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toInt256Safe",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 184,
                                      "src": "39277:84:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (int256)"
                                      }
                                    },
                                    "id": 1677,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "39277:86:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "id": 1678,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 555,
                                  "src": "39277: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": 1682,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "39277:133:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 1683,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint256Safe",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 161,
                              "src": "39277:164:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                "typeString": "function (int256) pure returns (uint256)"
                              }
                            },
                            "id": 1684,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "39277:166:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1685,
                            "name": "pointsMultiplier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1097,
                            "src": "39446:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "39277:185:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1669,
                        "id": 1687,
                        "nodeType": "Return",
                        "src": "39258:204:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "40bde098",
                  "id": 1689,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1666,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "39216:8:0"
                  },
                  "parameters": {
                    "id": 1665,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1664,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1689,
                        "src": "39193:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1663,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "39193:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39192:16:0"
                  },
                  "returnParameters": {
                    "id": 1669,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1668,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1689,
                        "src": "39239:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1667,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "39239:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39238:9:0"
                  },
                  "scope": 1880,
                  "src": "39163:306:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1327
                  ],
                  "body": {
                    "id": 1757,
                    "nodeType": "Block",
                    "src": "39982:547:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1703,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1692,
                              "src": "40008:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1704,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1694,
                              "src": "40014:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1705,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1696,
                              "src": "40018: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": 1700,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "39992:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_ExtendedFDT_$1880",
                                "typeString": "contract super ExtendedFDT"
                              }
                            },
                            "id": 1702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1327,
                            "src": "39992:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "39992:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1707,
                        "nodeType": "ExpressionStatement",
                        "src": "39992:32:0"
                      },
                      {
                        "assignments": [
                          1709
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1709,
                            "mutability": "mutable",
                            "name": "_lossesCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1757,
                            "src": "40035:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1708,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "40035:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1716,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1712,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1696,
                                  "src": "40084:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1710,
                                  "name": "lossesPerShare",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1526,
                                  "src": "40065:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1711,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 292,
                                "src": "40065: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": 1713,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "40065:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1714,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toInt256Safe",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 184,
                            "src": "40065:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (int256)"
                            }
                          },
                          "id": 1715,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40065:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "40035:70:0"
                      },
                      {
                        "assignments": [
                          1718
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1718,
                            "mutability": "mutable",
                            "name": "lossesCorrectionFrom",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1757,
                            "src": "40115:27:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1717,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "40115:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1725,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1723,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1709,
                              "src": "40172:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1719,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1530,
                                "src": "40145:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1721,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1720,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1692,
                                "src": "40162:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "40145:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1722,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 555,
                            "src": "40145: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": 1724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40145:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "40115:75:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1726,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1530,
                              "src": "40200:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1728,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1727,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1692,
                              "src": "40217:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "40200:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1729,
                            "name": "lossesCorrectionFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1718,
                            "src": "40230:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "40200:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1731,
                        "nodeType": "ExpressionStatement",
                        "src": "40200:50:0"
                      },
                      {
                        "assignments": [
                          1733
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1733,
                            "mutability": "mutable",
                            "name": "lossesCorrectionTo",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1757,
                            "src": "40260:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1732,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "40260:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1740,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1738,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1709,
                              "src": "40315:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1734,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1530,
                                "src": "40290:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1736,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1735,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1694,
                                "src": "40307:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "40290:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1737,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 515,
                            "src": "40290: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": 1739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40290:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "40260:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1741,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1530,
                              "src": "40343:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1743,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1742,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1694,
                              "src": "40360:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "40343:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1744,
                            "name": "lossesCorrectionTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1733,
                            "src": "40373:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "40343:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1746,
                        "nodeType": "ExpressionStatement",
                        "src": "40343:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1748,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1692,
                              "src": "40431:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1749,
                              "name": "lossesCorrectionFrom",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1718,
                              "src": "40437:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1747,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1462,
                            "src": "40407:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40407:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1751,
                        "nodeType": "EmitStatement",
                        "src": "40402:56:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1753,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1694,
                              "src": "40497:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1754,
                              "name": "lossesCorrectionTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1733,
                              "src": "40503:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1752,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1462,
                            "src": "40473:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40473:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1756,
                        "nodeType": "EmitStatement",
                        "src": "40468:54:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1690,
                    "nodeType": "StructuredDocumentation",
                    "src": "39475: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": 1758,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1698,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "39973:8:0"
                  },
                  "parameters": {
                    "id": 1697,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1692,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1758,
                        "src": "39894:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1691,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "39894:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1694,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1758,
                        "src": "39916:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1693,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "39916:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1696,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1758,
                        "src": "39936:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1695,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "39936:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39884:71:0"
                  },
                  "returnParameters": {
                    "id": 1699,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "39982:0:0"
                  },
                  "scope": 1880,
                  "src": "39866:663:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1370
                  ],
                  "body": {
                    "id": 1800,
                    "nodeType": "Block",
                    "src": "40906:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1770,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1761,
                              "src": "40928:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1771,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1763,
                              "src": "40937:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1767,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "40916:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_ExtendedFDT_$1880",
                                "typeString": "contract super ExtendedFDT"
                              }
                            },
                            "id": 1769,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_mint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1370,
                            "src": "40916:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40916:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1773,
                        "nodeType": "ExpressionStatement",
                        "src": "40916:27:0"
                      },
                      {
                        "assignments": [
                          1775
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1775,
                            "mutability": "mutable",
                            "name": "_lossesCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1800,
                            "src": "40954:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1774,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "40954:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1788,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1782,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1763,
                                          "src": "41044:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1780,
                                          "name": "lossesPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1526,
                                          "src": "41025:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1781,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 292,
                                        "src": "41025: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": 1783,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "41025:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1784,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "41024:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1785,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 184,
                                "src": "41024:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 1786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "41024:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1776,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1530,
                                "src": "40981:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1778,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1777,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1761,
                                "src": "40998:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "40981:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1779,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 515,
                            "src": "40981: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": 1787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40981:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "40954:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1793,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1789,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1530,
                              "src": "41087:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1791,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1790,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1761,
                              "src": "41104:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "41087:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1792,
                            "name": "_lossesCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1775,
                            "src": "41115:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "41087:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1794,
                        "nodeType": "ExpressionStatement",
                        "src": "41087:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1796,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1761,
                              "src": "41172:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1797,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1775,
                              "src": "41181:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1795,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1462,
                            "src": "41148:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41148:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1799,
                        "nodeType": "EmitStatement",
                        "src": "41143:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1759,
                    "nodeType": "StructuredDocumentation",
                    "src": "40535: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": 1801,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1765,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "40897:8:0"
                  },
                  "parameters": {
                    "id": 1764,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1761,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1801,
                        "src": "40848:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1760,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "40848:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1763,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1801,
                        "src": "40865:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1762,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "40865:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "40847:32:0"
                  },
                  "returnParameters": {
                    "id": 1766,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "40906:0:0"
                  },
                  "scope": 1880,
                  "src": "40833:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1413
                  ],
                  "body": {
                    "id": 1843,
                    "nodeType": "Block",
                    "src": "41597:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1813,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1804,
                              "src": "41619:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1814,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1806,
                              "src": "41628:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1810,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "41607:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_ExtendedFDT_$1880",
                                "typeString": "contract super ExtendedFDT"
                              }
                            },
                            "id": 1812,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_burn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1413,
                            "src": "41607:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41607:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1816,
                        "nodeType": "ExpressionStatement",
                        "src": "41607:27:0"
                      },
                      {
                        "assignments": [
                          1818
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1818,
                            "mutability": "mutable",
                            "name": "_lossesCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1843,
                            "src": "41645:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1817,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "41645:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1831,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1825,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1806,
                                          "src": "41735:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1823,
                                          "name": "lossesPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1526,
                                          "src": "41716:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1824,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 292,
                                        "src": "41716: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": 1826,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "41716:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1827,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "41715:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1828,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 184,
                                "src": "41715:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 1829,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "41715:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1819,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1530,
                                "src": "41672:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1821,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1820,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1804,
                                "src": "41689:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "41672:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1822,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 555,
                            "src": "41672: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": 1830,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41672:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "41645:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1832,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1530,
                              "src": "41778:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1834,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1833,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1804,
                              "src": "41795:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "41778:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1835,
                            "name": "_lossesCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1818,
                            "src": "41806:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "41778:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1837,
                        "nodeType": "ExpressionStatement",
                        "src": "41778:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1839,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1804,
                              "src": "41863:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1840,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1818,
                              "src": "41872:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1838,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1462,
                            "src": "41839:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41839:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1842,
                        "nodeType": "EmitStatement",
                        "src": "41834:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1802,
                    "nodeType": "StructuredDocumentation",
                    "src": "41212: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": 1844,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1808,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "41588:8:0"
                  },
                  "parameters": {
                    "id": 1807,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1804,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1844,
                        "src": "41539:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1803,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "41539:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1806,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1844,
                        "src": "41556:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1805,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "41556:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "41538:32:0"
                  },
                  "returnParameters": {
                    "id": 1809,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "41597:0:0"
                  },
                  "scope": 1880,
                  "src": "41524:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1506
                  ],
                  "body": {
                    "id": 1864,
                    "nodeType": "Block",
                    "src": "41959:150:0",
                    "statements": [
                      {
                        "assignments": [
                          1849
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1849,
                            "mutability": "mutable",
                            "name": "newLosses",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1864,
                            "src": "41969:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1848,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "41969:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1852,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1850,
                            "name": "_updateLossesBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1879,
                            "src": "41988:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 1851,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41988:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "41969:41:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 1855,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1853,
                            "name": "newLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "42025:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1854,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "42038:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "42025:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1857,
                        "nodeType": "IfStatement",
                        "src": "42021:27:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 1847,
                          "id": 1856,
                          "nodeType": "Return",
                          "src": "42041:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1859,
                                  "name": "newLosses",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1849,
                                  "src": "42076:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 1860,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toUint256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 161,
                                "src": "42076:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                  "typeString": "function (int256) pure returns (uint256)"
                                }
                              },
                              "id": 1861,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42076:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1858,
                            "name": "_distributeLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1593,
                            "src": "42058:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42058:44:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1863,
                        "nodeType": "ExpressionStatement",
                        "src": "42058:44:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "cc0fef02",
                  "id": 1865,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLossesReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1846,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "41942:8:0"
                  },
                  "parameters": {
                    "id": 1845,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "41932:2:0"
                  },
                  "returnParameters": {
                    "id": 1847,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "41959:0:0"
                  },
                  "scope": 1880,
                  "src": "41903:206:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1871,
                    "nodeType": "Block",
                    "src": "42287:3:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 1866,
                    "nodeType": "StructuredDocumentation",
                    "src": "42115:97:0",
                    "text": "@dev Recognizes all recognizable losses for an account using loss accounting."
                  },
                  "id": 1872,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_recognizeLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1867,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "42242:2:0"
                  },
                  "returnParameters": {
                    "id": 1870,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1869,
                        "mutability": "mutable",
                        "name": "losses",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1872,
                        "src": "42271:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1868,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "42271:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "42270:16:0"
                  },
                  "scope": 1880,
                  "src": "42217:73:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1878,
                    "nodeType": "Block",
                    "src": "42589:3:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 1873,
                    "nodeType": "StructuredDocumentation",
                    "src": "42296: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": 1879,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateLossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1874,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "42552:2:0"
                  },
                  "returnParameters": {
                    "id": 1877,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1876,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1879,
                        "src": "42581:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1875,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "42581:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "42580:8:0"
                  },
                  "scope": 1880,
                  "src": "42523:69:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 5010,
              "src": "36447:6148:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1881,
                "nodeType": "StructuredDocumentation",
                "src": "42690:104:0",
                "text": "@title MapleGlobals maintains a central source of parameters and allowlists for the Maple protocol."
              },
              "fullyImplemented": false,
              "id": 2371,
              "linearizedBaseContracts": [
                2371
              ],
              "name": "IMapleGlobals",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1882,
                    "nodeType": "StructuredDocumentation",
                    "src": "42825:91:0",
                    "text": "@dev   Emits an event indicating the MapleGlobals contract was created."
                  },
                  "id": 1884,
                  "name": "Initialized",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1883,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "42938:2:0"
                  },
                  "src": "42921:20:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1885,
                    "nodeType": "StructuredDocumentation",
                    "src": "42947: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": 1895,
                  "name": "CollateralAssetSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1894,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1887,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1895,
                        "src": "43313:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1886,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "43313:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1889,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "decimals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1895,
                        "src": "43328:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1888,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "43328:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1891,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1895,
                        "src": "43346:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1890,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "43346:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1893,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1895,
                        "src": "43361:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1892,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "43361:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "43312:60:0"
                  },
                  "src": "43288:85:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1896,
                    "nodeType": "StructuredDocumentation",
                    "src": "43379: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": 1906,
                  "name": "LiquidityAssetSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1905,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1898,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1906,
                        "src": "43742:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1897,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "43742:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1900,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "decimals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1906,
                        "src": "43757:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1899,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "43757:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1902,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1906,
                        "src": "43775:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1901,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "43775:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1904,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1906,
                        "src": "43790:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1903,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "43790:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "43741:60:0"
                  },
                  "src": "43718:84:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1907,
                    "nodeType": "StructuredDocumentation",
                    "src": "43808: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": 1913,
                  "name": "OracleSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1912,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1909,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1913,
                        "src": "44012:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1908,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "44012:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1911,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oracle",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1913,
                        "src": "44027:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1910,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "44027:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "44011:31:0"
                  },
                  "src": "43996:47:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1914,
                    "nodeType": "StructuredDocumentation",
                    "src": "44049:40:0",
                    "text": "@dev This is unused."
                  },
                  "id": 1920,
                  "name": "TransferRestrictionExemptionSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1919,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1916,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "exemptedContract",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1920,
                        "src": "44132:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1915,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "44132:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1918,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1920,
                        "src": "44166:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1917,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "44166:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "44131:46:0"
                  },
                  "src": "44094:84:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1921,
                    "nodeType": "StructuredDocumentation",
                    "src": "44184: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": 1927,
                  "name": "BalancerPoolSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1926,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1923,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1927,
                        "src": "44443:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1922,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "44443:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1925,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1927,
                        "src": "44465:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1924,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "44465:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "44442:34:0"
                  },
                  "src": "44421:56:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1928,
                    "nodeType": "StructuredDocumentation",
                    "src": "44483:151:0",
                    "text": "@dev   Emits an event indicating a PendingGovernor was set.\n@param pendingGovernor The address of the new Pending Governor."
                  },
                  "id": 1932,
                  "name": "PendingGovernorSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1931,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1930,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "pendingGovernor",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1932,
                        "src": "44664:31:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1929,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "44664:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "44663:33:0"
                  },
                  "src": "44639:58:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1933,
                    "nodeType": "StructuredDocumentation",
                    "src": "44703: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": 1937,
                  "name": "GovernorAccepted",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1936,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1935,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "governor",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1937,
                        "src": "44895:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1934,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "44895:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "44894:26:0"
                  },
                  "src": "44872:49:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1938,
                    "nodeType": "StructuredDocumentation",
                    "src": "44927: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": 1944,
                  "name": "GlobalsParamSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1943,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1940,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "which",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1944,
                        "src": "45179:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1939,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "45179:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1942,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1944,
                        "src": "45202:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1941,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "45202:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "45178:38:0"
                  },
                  "src": "45157:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1945,
                    "nodeType": "StructuredDocumentation",
                    "src": "45223: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": 1951,
                  "name": "GlobalsAddressSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1950,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1947,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "which",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1951,
                        "src": "45463:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1946,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "45463:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1949,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "addr",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1951,
                        "src": "45486:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1948,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "45486:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "45462:37:0"
                  },
                  "src": "45439:61:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1952,
                    "nodeType": "StructuredDocumentation",
                    "src": "45506: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": 1956,
                  "name": "ProtocolPaused",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1955,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1954,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "pause",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1956,
                        "src": "45680:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1953,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "45680:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "45679:12:0"
                  },
                  "src": "45659:33:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1957,
                    "nodeType": "StructuredDocumentation",
                    "src": "45698:143:0",
                    "text": "@dev   Emits an event indicating the GlobalAdmin was set.\n@param newGlobalAdmin The address of the new GlobalAdmin."
                  },
                  "id": 1961,
                  "name": "GlobalAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1960,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1959,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newGlobalAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1961,
                        "src": "45867:30:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1958,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "45867:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "45866:32:0"
                  },
                  "src": "45846:53:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1962,
                    "nodeType": "StructuredDocumentation",
                    "src": "45905: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": 1968,
                  "name": "PoolDelegateSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1967,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1964,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1968,
                        "src": "46162:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1963,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "46162:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1966,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1968,
                        "src": "46192:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1965,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "46192:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "46161:42:0"
                  },
                  "src": "46140:64:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1969,
                    "nodeType": "StructuredDocumentation",
                    "src": "46210:73:0",
                    "text": "@dev The ERC-2222 Maple Token for the Maple protocol."
                  },
                  "functionSelector": "a0530946",
                  "id": 1974,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mpl",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1970,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "46300:2:0"
                  },
                  "returnParameters": {
                    "id": 1973,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1972,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1974,
                        "src": "46326:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1971,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "46326:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "46325:9:0"
                  },
                  "scope": 2371,
                  "src": "46288:47:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1975,
                    "nodeType": "StructuredDocumentation",
                    "src": "46341: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": 1980,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pendingGovernor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1976,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "46512:2:0"
                  },
                  "returnParameters": {
                    "id": 1979,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1978,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1980,
                        "src": "46538:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1977,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "46538:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "46537:9:0"
                  },
                  "scope": 2371,
                  "src": "46488:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1981,
                    "nodeType": "StructuredDocumentation",
                    "src": "46553:91:0",
                    "text": "@dev The Governor responsible for management of global Maple variables."
                  },
                  "functionSelector": "0c340a24",
                  "id": 1986,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "governor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1982,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "46666:2:0"
                  },
                  "returnParameters": {
                    "id": 1985,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1984,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1986,
                        "src": "46692:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1983,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "46692:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "46691:9:0"
                  },
                  "scope": 2371,
                  "src": "46649:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1987,
                    "nodeType": "StructuredDocumentation",
                    "src": "46707:125:0",
                    "text": "@dev The MapleTreasury is the Treasury where all fees pass through for conversion, prior to distribution."
                  },
                  "functionSelector": "a5a27605",
                  "id": 1992,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mapleTreasury",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1988,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "46859:2:0"
                  },
                  "returnParameters": {
                    "id": 1991,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1990,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1992,
                        "src": "46885:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1989,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "46885:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "46884:9:0"
                  },
                  "scope": 2371,
                  "src": "46837:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1993,
                    "nodeType": "StructuredDocumentation",
                    "src": "46900: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": 1998,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "globalAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1994,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "47072:2:0"
                  },
                  "returnParameters": {
                    "id": 1997,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1996,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1998,
                        "src": "47098:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1995,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "47098:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "47097:9:0"
                  },
                  "scope": 2371,
                  "src": "47052:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1999,
                    "nodeType": "StructuredDocumentation",
                    "src": "47113: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": 2004,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defaultGracePeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2000,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "47264:2:0"
                  },
                  "returnParameters": {
                    "id": 2003,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2002,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2004,
                        "src": "47290:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2001,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "47290:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "47289:9:0"
                  },
                  "scope": 2371,
                  "src": "47237:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2005,
                    "nodeType": "StructuredDocumentation",
                    "src": "47305: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": 2010,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swapOutRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2006,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "47460:2:0"
                  },
                  "returnParameters": {
                    "id": 2009,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2008,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2010,
                        "src": "47486:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2007,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "47486:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "47485:9:0"
                  },
                  "scope": 2371,
                  "src": "47436:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2011,
                    "nodeType": "StructuredDocumentation",
                    "src": "47501:116:0",
                    "text": "@dev The amount of time to allow a Borrower to drawdown on their Loan after funding period ends."
                  },
                  "functionSelector": "74d7c62b",
                  "id": 2016,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundingPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2012,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "47644:2:0"
                  },
                  "returnParameters": {
                    "id": 2015,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2014,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2016,
                        "src": "47670:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2013,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "47670:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "47669:9:0"
                  },
                  "scope": 2371,
                  "src": "47622:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2017,
                    "nodeType": "StructuredDocumentation",
                    "src": "47685:104:0",
                    "text": "@dev The portion of drawdown that goes to the Pool Delegates and individual Lenders."
                  },
                  "functionSelector": "16a12d7a",
                  "id": 2022,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "investorFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2018,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "47814:2:0"
                  },
                  "returnParameters": {
                    "id": 2021,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2020,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2022,
                        "src": "47840:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2019,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "47840:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "47839:9:0"
                  },
                  "scope": 2371,
                  "src": "47794:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2023,
                    "nodeType": "StructuredDocumentation",
                    "src": "47855:80:0",
                    "text": "@dev The portion of drawdown that goes to the MapleTreasury."
                  },
                  "functionSelector": "cc32d176",
                  "id": 2028,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "treasuryFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2024,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "47960:2:0"
                  },
                  "returnParameters": {
                    "id": 2027,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2026,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2028,
                        "src": "47986:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2025,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "47986:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "47985:9:0"
                  },
                  "scope": 2371,
                  "src": "47940:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2029,
                    "nodeType": "StructuredDocumentation",
                    "src": "48001:81:0",
                    "text": "@dev The maximum amount of slippage for Uniswap transactions."
                  },
                  "functionSelector": "55323195",
                  "id": 2034,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "maxSwapSlippage",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2030,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "48111:2:0"
                  },
                  "returnParameters": {
                    "id": 2033,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2032,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2034,
                        "src": "48137:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2031,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48137:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48136:9:0"
                  },
                  "scope": 2371,
                  "src": "48087:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2035,
                    "nodeType": "StructuredDocumentation",
                    "src": "48152:130:0",
                    "text": "@dev The minimum amount of LoanFDTs required to trigger liquidations (basis points percentage of totalSupply)."
                  },
                  "functionSelector": "4a2697c4",
                  "id": 2040,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "minLoanEquity",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2036,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "48309:2:0"
                  },
                  "returnParameters": {
                    "id": 2039,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2038,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2040,
                        "src": "48335:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2037,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48335:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48334:9:0"
                  },
                  "scope": 2371,
                  "src": "48287:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2041,
                    "nodeType": "StructuredDocumentation",
                    "src": "48350:119:0",
                    "text": "@dev The period (in secs) after which Stakers are allowed to unstake their BPTs from a StakeLocker."
                  },
                  "functionSelector": "a965d6b5",
                  "id": 2046,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakerCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2042,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "48503:2:0"
                  },
                  "returnParameters": {
                    "id": 2045,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2044,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2046,
                        "src": "48529:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2043,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48529:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48528:9:0"
                  },
                  "scope": 2371,
                  "src": "48474:64:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2047,
                    "nodeType": "StructuredDocumentation",
                    "src": "48544:110:0",
                    "text": "@dev The period (in secs) after which LPs are allowed to withdraw their funds from a Pool."
                  },
                  "functionSelector": "dd02e0ec",
                  "id": 2052,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lpCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2048,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "48684:2:0"
                  },
                  "returnParameters": {
                    "id": 2051,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2050,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2052,
                        "src": "48710:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2049,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48710:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48709:9:0"
                  },
                  "scope": 2371,
                  "src": "48659:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2053,
                    "nodeType": "StructuredDocumentation",
                    "src": "48725: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": 2058,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakerUnstakeWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2054,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "48919:2:0"
                  },
                  "returnParameters": {
                    "id": 2057,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2056,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2058,
                        "src": "48945:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2055,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48945:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48944:9:0"
                  },
                  "scope": 2371,
                  "src": "48891:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2059,
                    "nodeType": "StructuredDocumentation",
                    "src": "48960: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": 2064,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lpWithdrawWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2060,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "49148:2:0"
                  },
                  "returnParameters": {
                    "id": 2063,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2062,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2064,
                        "src": "49174:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2061,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "49174:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "49173:9:0"
                  },
                  "scope": 2371,
                  "src": "49123:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2065,
                    "nodeType": "StructuredDocumentation",
                    "src": "49189:84:0",
                    "text": "@dev Whether the functionality of the entire protocol is paused."
                  },
                  "functionSelector": "425fad58",
                  "id": 2070,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "protocolPaused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2066,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "49301:2:0"
                  },
                  "returnParameters": {
                    "id": 2069,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2068,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2070,
                        "src": "49327:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2067,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "49327:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "49326:6:0"
                  },
                  "scope": 2371,
                  "src": "49278:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2071,
                    "nodeType": "StructuredDocumentation",
                    "src": "49339:127:0",
                    "text": "@param  liquidityAsset The address of a Liquidity Asset.\n@return Whether `liquidityAsset` is valid."
                  },
                  "functionSelector": "8695118a",
                  "id": 2078,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidLiquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2074,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2073,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2078,
                        "src": "49502:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2072,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "49502:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "49501:24:0"
                  },
                  "returnParameters": {
                    "id": 2077,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2076,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2078,
                        "src": "49549:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2075,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "49549:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "49548:6:0"
                  },
                  "scope": 2371,
                  "src": "49471:84:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2079,
                    "nodeType": "StructuredDocumentation",
                    "src": "49561:130:0",
                    "text": "@param  collateralAsset The address of a Collateral Asset.\n@return Whether `collateralAsset` is valid."
                  },
                  "functionSelector": "8c14834b",
                  "id": 2086,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidCollateralAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2082,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2081,
                        "mutability": "mutable",
                        "name": "collateralAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2086,
                        "src": "49728:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2080,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "49728:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "49727:25:0"
                  },
                  "returnParameters": {
                    "id": 2085,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2084,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2086,
                        "src": "49776:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2083,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "49776:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "49775:6:0"
                  },
                  "scope": 2371,
                  "src": "49696:86:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2087,
                    "nodeType": "StructuredDocumentation",
                    "src": "49788:102:0",
                    "text": "@param  calc The address of a Calculator.\n@return Whether `calc` is valid."
                  },
                  "functionSelector": "1beb84e7",
                  "id": 2094,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "validCalcs",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2090,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2089,
                        "mutability": "mutable",
                        "name": "calc",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2094,
                        "src": "49915:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2088,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "49915:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "49914:14:0"
                  },
                  "returnParameters": {
                    "id": 2093,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2092,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2094,
                        "src": "49952:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2091,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "49952:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "49951:6:0"
                  },
                  "scope": 2371,
                  "src": "49895:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2095,
                    "nodeType": "StructuredDocumentation",
                    "src": "49964: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": 2102,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidPoolDelegate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2098,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2097,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2102,
                        "src": "50196:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2096,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "50196:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "50195:22:0"
                  },
                  "returnParameters": {
                    "id": 2101,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2100,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2102,
                        "src": "50241:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2099,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "50241:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "50240:6:0"
                  },
                  "scope": 2371,
                  "src": "50167:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2103,
                    "nodeType": "StructuredDocumentation",
                    "src": "50253:147:0",
                    "text": "@param  balancerPool The address of a Balancer Pool.\n@return Whether Maple has approved `balancerPool` for BPT staking."
                  },
                  "functionSelector": "72a22d71",
                  "id": 2110,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidBalancerPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2106,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2105,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2110,
                        "src": "50434:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2104,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "50434:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "50433:22:0"
                  },
                  "returnParameters": {
                    "id": 2109,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2108,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2110,
                        "src": "50479:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2107,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "50479:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "50478:6:0"
                  },
                  "scope": 2371,
                  "src": "50405:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2111,
                    "nodeType": "StructuredDocumentation",
                    "src": "50491: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": 2120,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defaultUniswapPath",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2116,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2113,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2120,
                        "src": "51292:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2112,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "51292:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2115,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2120,
                        "src": "51308:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2114,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "51308:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51291:32:0"
                  },
                  "returnParameters": {
                    "id": 2119,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2118,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2120,
                        "src": "51347:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2117,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "51347:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51346:9:0"
                  },
                  "scope": 2371,
                  "src": "51264:92:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2121,
                    "nodeType": "StructuredDocumentation",
                    "src": "51362:123:0",
                    "text": "@param  asset The address of some token.\n@return The Chainlink Oracle for the price of `asset`."
                  },
                  "functionSelector": "aed019b9",
                  "id": 2128,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "oracleFor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2124,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2123,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2128,
                        "src": "51509:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2122,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "51509:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51508:15:0"
                  },
                  "returnParameters": {
                    "id": 2127,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2126,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2128,
                        "src": "51547:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2125,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "51547:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51546:9:0"
                  },
                  "scope": 2371,
                  "src": "51490:66:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2129,
                    "nodeType": "StructuredDocumentation",
                    "src": "51566:118:0",
                    "text": "@param  poolFactory The address of a Pool Factory.\n@return Whether `poolFactory` is valid."
                  },
                  "functionSelector": "107c0240",
                  "id": 2136,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidPoolFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2132,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2131,
                        "mutability": "mutable",
                        "name": "poolFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2136,
                        "src": "51717:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2130,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "51717:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51716:21:0"
                  },
                  "returnParameters": {
                    "id": 2135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2134,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2136,
                        "src": "51761:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2133,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "51761:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51760:6:0"
                  },
                  "scope": 2371,
                  "src": "51689:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2137,
                    "nodeType": "StructuredDocumentation",
                    "src": "51773:118:0",
                    "text": "@param  loanFactory The address of a Loan Factory.\n@return Whether `loanFactory` is valid."
                  },
                  "functionSelector": "b53afda7",
                  "id": 2144,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidLoanFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2140,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2139,
                        "mutability": "mutable",
                        "name": "loanFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2144,
                        "src": "51924:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2138,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "51924:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51923:21:0"
                  },
                  "returnParameters": {
                    "id": 2143,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2142,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2144,
                        "src": "51968:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2141,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "51968:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51967:6:0"
                  },
                  "scope": 2371,
                  "src": "51896:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2145,
                    "nodeType": "StructuredDocumentation",
                    "src": "51984: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": 2154,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "validSubFactories",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2150,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2147,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2154,
                        "src": "52282:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2146,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "52282:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2149,
                        "mutability": "mutable",
                        "name": "subFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2154,
                        "src": "52304:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2148,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "52304:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "52281:42:0"
                  },
                  "returnParameters": {
                    "id": 2153,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2152,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2154,
                        "src": "52347:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2151,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "52347:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "52346:6:0"
                  },
                  "scope": 2371,
                  "src": "52255:98:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2155,
                    "nodeType": "StructuredDocumentation",
                    "src": "52363: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": 2160,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakerCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2158,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2157,
                        "mutability": "mutable",
                        "name": "newCooldownPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2160,
                        "src": "52764:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2156,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "52764:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "52763:27:0"
                  },
                  "returnParameters": {
                    "id": 2159,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "52799:0:0"
                  },
                  "scope": 2371,
                  "src": "52731:69:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2161,
                    "nodeType": "StructuredDocumentation",
                    "src": "52806: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": 2166,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLpCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2164,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2163,
                        "mutability": "mutable",
                        "name": "newCooldownPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2166,
                        "src": "53208:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2162,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "53208:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "53207:27:0"
                  },
                  "returnParameters": {
                    "id": 2165,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "53243:0:0"
                  },
                  "scope": 2371,
                  "src": "53179:65:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2167,
                    "nodeType": "StructuredDocumentation",
                    "src": "53250: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": 2172,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakerUnstakeWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2170,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2169,
                        "mutability": "mutable",
                        "name": "newUnstakeWindow",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2172,
                        "src": "53636:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2168,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "53636:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "53635:26:0"
                  },
                  "returnParameters": {
                    "id": 2171,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "53670:0:0"
                  },
                  "scope": 2371,
                  "src": "53604:67:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2173,
                    "nodeType": "StructuredDocumentation",
                    "src": "53677: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": 2178,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLpWithdrawWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2176,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2175,
                        "mutability": "mutable",
                        "name": "newLpWithdrawWindow",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2178,
                        "src": "54070:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2174,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "54070:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "54069:29:0"
                  },
                  "returnParameters": {
                    "id": 2177,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "54107:0:0"
                  },
                  "scope": 2371,
                  "src": "54041:67:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2179,
                    "nodeType": "StructuredDocumentation",
                    "src": "54114: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": 2184,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMaxSwapSlippage",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2182,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2181,
                        "mutability": "mutable",
                        "name": "newMaxSlippage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2184,
                        "src": "54427:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2180,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "54427:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "54426:24:0"
                  },
                  "returnParameters": {
                    "id": 2183,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "54459:0:0"
                  },
                  "scope": 2371,
                  "src": "54399:61:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2185,
                    "nodeType": "StructuredDocumentation",
                    "src": "54466: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": 2190,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGlobalAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2188,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2187,
                        "mutability": "mutable",
                        "name": "newGlobalAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2190,
                        "src": "54706:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2186,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "54706:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "54705:24:0"
                  },
                  "returnParameters": {
                    "id": 2189,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "54738:0:0"
                  },
                  "scope": 2371,
                  "src": "54682:57:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2191,
                    "nodeType": "StructuredDocumentation",
                    "src": "54745: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": 2198,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidBalancerPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2196,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2193,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2198,
                        "src": "55094:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2192,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "55094:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2195,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2198,
                        "src": "55116:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2194,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "55116:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "55093:34:0"
                  },
                  "returnParameters": {
                    "id": 2197,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "55136:0:0"
                  },
                  "scope": 2371,
                  "src": "55064:73:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2199,
                    "nodeType": "StructuredDocumentation",
                    "src": "55143: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": 2204,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setProtocolPause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2202,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2201,
                        "mutability": "mutable",
                        "name": "pause",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2204,
                        "src": "55464:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2200,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "55464:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "55463:12:0"
                  },
                  "returnParameters": {
                    "id": 2203,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "55484:0:0"
                  },
                  "scope": 2371,
                  "src": "55438:47:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2205,
                    "nodeType": "StructuredDocumentation",
                    "src": "55491: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": 2212,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidPoolFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2210,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2207,
                        "mutability": "mutable",
                        "name": "poolFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2212,
                        "src": "55772:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2206,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "55772:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2209,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2212,
                        "src": "55793:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2208,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "55793:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "55771:33:0"
                  },
                  "returnParameters": {
                    "id": 2211,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "55813:0:0"
                  },
                  "scope": 2371,
                  "src": "55743:71:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2213,
                    "nodeType": "StructuredDocumentation",
                    "src": "55820: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": 2220,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidLoanFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2215,
                        "mutability": "mutable",
                        "name": "loanFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2220,
                        "src": "56101:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2214,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "56101:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2217,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2220,
                        "src": "56122:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2216,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "56122:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "56100:33:0"
                  },
                  "returnParameters": {
                    "id": 2219,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "56142:0:0"
                  },
                  "scope": 2371,
                  "src": "56072:71:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2221,
                    "nodeType": "StructuredDocumentation",
                    "src": "56149: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": 2230,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidSubFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2228,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2223,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2230,
                        "src": "56610:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2222,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "56610:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2225,
                        "mutability": "mutable",
                        "name": "subFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2230,
                        "src": "56632:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2224,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "56632:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2227,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2230,
                        "src": "56652:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2226,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "56652:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "56609:54:0"
                  },
                  "returnParameters": {
                    "id": 2229,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "56672:0:0"
                  },
                  "scope": 2371,
                  "src": "56582:91:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2231,
                    "nodeType": "StructuredDocumentation",
                    "src": "56679: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": 2240,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setDefaultUniswapPath",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2238,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2233,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2240,
                        "src": "57187:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2232,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "57187:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2235,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2240,
                        "src": "57201:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2234,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "57201:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2237,
                        "mutability": "mutable",
                        "name": "mid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2240,
                        "src": "57213:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2236,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "57213:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57186:39:0"
                  },
                  "returnParameters": {
                    "id": 2239,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "57234:0:0"
                  },
                  "scope": 2371,
                  "src": "57156:79:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2241,
                    "nodeType": "StructuredDocumentation",
                    "src": "57241: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": 2248,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolDelegateAllowlist",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2246,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2243,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2248,
                        "src": "57626:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2242,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "57626:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2245,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2248,
                        "src": "57648:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2244,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "57648:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57625:34:0"
                  },
                  "returnParameters": {
                    "id": 2247,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "57668:0:0"
                  },
                  "scope": 2371,
                  "src": "57592:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2249,
                    "nodeType": "StructuredDocumentation",
                    "src": "57675: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": 2256,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setCollateralAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2254,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2251,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2256,
                        "src": "58016:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2250,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "58016:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2253,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2256,
                        "src": "58031:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2252,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "58031:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "58015:27:0"
                  },
                  "returnParameters": {
                    "id": 2255,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "58051:0:0"
                  },
                  "scope": 2371,
                  "src": "57988:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2257,
                    "nodeType": "StructuredDocumentation",
                    "src": "58058: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": 2264,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLiquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2262,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2259,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2264,
                        "src": "58410:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2258,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "58410:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2261,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2264,
                        "src": "58425:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2260,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "58425:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "58409:27:0"
                  },
                  "returnParameters": {
                    "id": 2263,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "58445:0:0"
                  },
                  "scope": 2371,
                  "src": "58383:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2265,
                    "nodeType": "StructuredDocumentation",
                    "src": "58452: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": 2272,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2270,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2267,
                        "mutability": "mutable",
                        "name": "calc",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2272,
                        "src": "58710:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2266,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "58710:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2269,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2272,
                        "src": "58724:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2268,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "58724:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "58709:26:0"
                  },
                  "returnParameters": {
                    "id": 2271,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "58744:0:0"
                  },
                  "scope": 2371,
                  "src": "58693:52:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2273,
                    "nodeType": "StructuredDocumentation",
                    "src": "58751: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": 2278,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setInvestorFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2275,
                        "mutability": "mutable",
                        "name": "_fee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2278,
                        "src": "59005:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2274,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "59005:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "59004:14:0"
                  },
                  "returnParameters": {
                    "id": 2277,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "59027:0:0"
                  },
                  "scope": 2371,
                  "src": "58981:47:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2279,
                    "nodeType": "StructuredDocumentation",
                    "src": "59034: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": 2284,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setTreasuryFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2282,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2281,
                        "mutability": "mutable",
                        "name": "_fee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2284,
                        "src": "59288:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2280,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "59288:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "59287:14:0"
                  },
                  "returnParameters": {
                    "id": 2283,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "59310:0:0"
                  },
                  "scope": 2371,
                  "src": "59264:47:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2285,
                    "nodeType": "StructuredDocumentation",
                    "src": "59317: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": 2290,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMapleTreasury",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2288,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2287,
                        "mutability": "mutable",
                        "name": "_mapleTreasury",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2290,
                        "src": "59568:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2286,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "59568:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "59567:24:0"
                  },
                  "returnParameters": {
                    "id": 2289,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "59600:0:0"
                  },
                  "scope": 2371,
                  "src": "59542:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2291,
                    "nodeType": "StructuredDocumentation",
                    "src": "59607: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": 2296,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setDefaultGracePeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2294,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2293,
                        "mutability": "mutable",
                        "name": "_defaultGracePeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2296,
                        "src": "59900:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2292,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "59900:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "59899:29:0"
                  },
                  "returnParameters": {
                    "id": 2295,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "59937:0:0"
                  },
                  "scope": 2371,
                  "src": "59869:69:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2297,
                    "nodeType": "StructuredDocumentation",
                    "src": "59944: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": 2302,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMinLoanEquity",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2300,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2299,
                        "mutability": "mutable",
                        "name": "_minLoanEquity",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2302,
                        "src": "60260:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2298,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "60260:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "60259:24:0"
                  },
                  "returnParameters": {
                    "id": 2301,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60292:0:0"
                  },
                  "scope": 2371,
                  "src": "60234:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2303,
                    "nodeType": "StructuredDocumentation",
                    "src": "60299: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": 2308,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setFundingPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2306,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2305,
                        "mutability": "mutable",
                        "name": "_fundingPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2308,
                        "src": "60581:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2304,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "60581:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "60580:24:0"
                  },
                  "returnParameters": {
                    "id": 2307,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60613:0:0"
                  },
                  "scope": 2371,
                  "src": "60555:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2309,
                    "nodeType": "StructuredDocumentation",
                    "src": "60620: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": 2314,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setSwapOutRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2312,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2311,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2314,
                        "src": "60905:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2310,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "60905:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "60904:13:0"
                  },
                  "returnParameters": {
                    "id": 2313,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60926:0:0"
                  },
                  "scope": 2371,
                  "src": "60877:50:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2315,
                    "nodeType": "StructuredDocumentation",
                    "src": "60933: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": 2322,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPriceOracle",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2320,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2317,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2322,
                        "src": "61244:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2316,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "61244:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2319,
                        "mutability": "mutable",
                        "name": "oracle",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2322,
                        "src": "61259:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2318,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "61259:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "61243:31:0"
                  },
                  "returnParameters": {
                    "id": 2321,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "61283:0:0"
                  },
                  "scope": 2371,
                  "src": "61220:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2323,
                    "nodeType": "StructuredDocumentation",
                    "src": "61290: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": 2328,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPendingGovernor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2326,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2325,
                        "mutability": "mutable",
                        "name": "_pendingGovernor",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2328,
                        "src": "61628:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2324,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "61628:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "61627:26:0"
                  },
                  "returnParameters": {
                    "id": 2327,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "61662:0:0"
                  },
                  "scope": 2371,
                  "src": "61600:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2329,
                    "nodeType": "StructuredDocumentation",
                    "src": "61669: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": 2332,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "acceptGovernor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2330,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "61867:2:0"
                  },
                  "returnParameters": {
                    "id": 2331,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "61878:0:0"
                  },
                  "scope": 2371,
                  "src": "61844:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2333,
                    "nodeType": "StructuredDocumentation",
                    "src": "61885: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": 2340,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLatestPrice",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2336,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2335,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2340,
                        "src": "62085:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2334,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62085:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62084:15:0"
                  },
                  "returnParameters": {
                    "id": 2339,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2338,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2340,
                        "src": "62123:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2337,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "62123:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62122:9:0"
                  },
                  "scope": 2371,
                  "src": "62061:71:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2341,
                    "nodeType": "StructuredDocumentation",
                    "src": "62138: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": 2352,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidSubFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2348,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2343,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2352,
                        "src": "62811:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2342,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62811:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2345,
                        "mutability": "mutable",
                        "name": "subFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2352,
                        "src": "62833:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2344,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62833:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2347,
                        "mutability": "mutable",
                        "name": "factoryType",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2352,
                        "src": "62853:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2346,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "62853:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62810:61:0"
                  },
                  "returnParameters": {
                    "id": 2351,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2350,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2352,
                        "src": "62895:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2349,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "62895:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62894:6:0"
                  },
                  "scope": 2371,
                  "src": "62784:117:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2353,
                    "nodeType": "StructuredDocumentation",
                    "src": "62907: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": 2362,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2358,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2355,
                        "mutability": "mutable",
                        "name": "calc",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2362,
                        "src": "63087:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2354,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "63087:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2357,
                        "mutability": "mutable",
                        "name": "calcType",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2362,
                        "src": "63101:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2356,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "63101:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63086:30:0"
                  },
                  "returnParameters": {
                    "id": 2361,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2360,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2362,
                        "src": "63140:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2359,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "63140:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63139:6:0"
                  },
                  "scope": 2371,
                  "src": "63066:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2363,
                    "nodeType": "StructuredDocumentation",
                    "src": "63152: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": 2370,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLpCooldownParams",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2364,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "63393:2:0"
                  },
                  "returnParameters": {
                    "id": 2369,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2366,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2370,
                        "src": "63419:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2365,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "63419:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2368,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2370,
                        "src": "63428:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "63428:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63418:18:0"
                  },
                  "scope": 2371,
                  "src": "63365:72:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5010,
              "src": "42794:20646:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 2373,
                    "name": "IExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1507,
                    "src": "63748:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExtendedFDT_$1507",
                      "typeString": "contract IExtendedFDT"
                    }
                  },
                  "id": 2374,
                  "nodeType": "InheritanceSpecifier",
                  "src": "63748:12:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1507
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 2372,
                "nodeType": "StructuredDocumentation",
                "src": "63631:95:0",
                "text": "@title PoolFDT inherits ExtendedFDT and accounts for gains/losses for Liquidity Providers."
              },
              "fullyImplemented": false,
              "id": 2399,
              "linearizedBaseContracts": [
                2399,
                1507,
                141,
                77
              ],
              "name": "IPoolFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 2375,
                    "nodeType": "StructuredDocumentation",
                    "src": "63768:62:0",
                    "text": "@dev The sum of all withdrawable interest."
                  },
                  "functionSelector": "71073bac",
                  "id": 2380,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "interestSum",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2376,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "63855:2:0"
                  },
                  "returnParameters": {
                    "id": 2379,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2378,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2380,
                        "src": "63881:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2377,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "63881:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63880:9:0"
                  },
                  "scope": 2399,
                  "src": "63835:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2381,
                    "nodeType": "StructuredDocumentation",
                    "src": "63896:60:0",
                    "text": "@dev The sum of all unrecognized losses."
                  },
                  "functionSelector": "a33142f7",
                  "id": 2386,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2382,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "63980:2:0"
                  },
                  "returnParameters": {
                    "id": 2385,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2384,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2386,
                        "src": "64006:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2383,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "64006:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64005:9:0"
                  },
                  "scope": 2399,
                  "src": "63961:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2387,
                    "nodeType": "StructuredDocumentation",
                    "src": "64021:98:0",
                    "text": "@dev The amount of earned interest present and accounted for in this contract."
                  },
                  "functionSelector": "9f3c7325",
                  "id": 2392,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "interestBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2388,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "64148:2:0"
                  },
                  "returnParameters": {
                    "id": 2391,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2390,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2392,
                        "src": "64174:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2389,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "64174:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64173:9:0"
                  },
                  "scope": 2399,
                  "src": "64124:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2393,
                    "nodeType": "StructuredDocumentation",
                    "src": "64189:89:0",
                    "text": "@dev The amount of losses present and accounted for in this contract."
                  },
                  "functionSelector": "fec984e3",
                  "id": 2398,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2394,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "64305:2:0"
                  },
                  "returnParameters": {
                    "id": 2397,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2396,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2398,
                        "src": "64331:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2395,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "64331:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64330:9:0"
                  },
                  "scope": 2399,
                  "src": "64283:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5010,
              "src": "63726:617:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 2401,
                    "name": "IPoolFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2399,
                    "src": "64681:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolFDT_$2399",
                      "typeString": "contract IPoolFDT"
                    }
                  },
                  "id": 2402,
                  "nodeType": "InheritanceSpecifier",
                  "src": "64681:8:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1507,
                2399
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 2400,
                "nodeType": "StructuredDocumentation",
                "src": "64585:77:0",
                "text": "@title Pool maintains all accounting and functionality related to Pools."
              },
              "fullyImplemented": false,
              "id": 2866,
              "linearizedBaseContracts": [
                2866,
                2399,
                1507,
                141,
                77
              ],
              "name": "IPool",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "IPool.State",
                  "id": 2406,
                  "members": [
                    {
                      "id": 2403,
                      "name": "Initialized",
                      "nodeType": "EnumValue",
                      "src": "64947:11:0"
                    },
                    {
                      "id": 2404,
                      "name": "Finalized",
                      "nodeType": "EnumValue",
                      "src": "64960:9:0"
                    },
                    {
                      "id": 2405,
                      "name": "Deactivated",
                      "nodeType": "EnumValue",
                      "src": "64971:11:0"
                    }
                  ],
                  "name": "State",
                  "nodeType": "EnumDefinition",
                  "src": "64934:50:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2407,
                    "nodeType": "StructuredDocumentation",
                    "src": "64990: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": 2415,
                  "name": "LoanFunded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2414,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2409,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2415,
                        "src": "65236:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2408,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "65236:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2411,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2415,
                        "src": "65258:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2410,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "65258:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2413,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amountFunded",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2415,
                        "src": "65278:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2412,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "65278:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65235:64:0"
                  },
                  "src": "65219:81:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2416,
                    "nodeType": "StructuredDocumentation",
                    "src": "65306: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": 2430,
                  "name": "Claim",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2429,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2418,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2430,
                        "src": "65741:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2417,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "65741:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2420,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "interest",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2430,
                        "src": "65763:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2419,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "65763:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2422,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "principal",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2430,
                        "src": "65781:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "65781:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2424,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2430,
                        "src": "65800:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2423,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "65800:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2426,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeLockerPortion",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2430,
                        "src": "65813:26:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2425,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "65813:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2428,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "poolDelegatePortion",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2430,
                        "src": "65841:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2427,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "65841:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65740:129:0"
                  },
                  "src": "65729:141:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2431,
                    "nodeType": "StructuredDocumentation",
                    "src": "65876: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": 2439,
                  "name": "BalanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2438,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2433,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2439,
                        "src": "66236:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2432,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "66236:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2435,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2439,
                        "src": "66271:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2434,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "66271:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2437,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2439,
                        "src": "66294:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2436,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66294:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66235:75:0"
                  },
                  "src": "66215:96:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2440,
                    "nodeType": "StructuredDocumentation",
                    "src": "66317: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": 2450,
                  "name": "CustodyTransfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2449,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2442,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2450,
                        "src": "66687:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2441,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "66687:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2444,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2450,
                        "src": "66714:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2443,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "66714:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2446,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2450,
                        "src": "66736:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2445,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "66736:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2448,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2450,
                        "src": "66756:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2447,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66756:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66686:85:0"
                  },
                  "src": "66665:107:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2451,
                    "nodeType": "StructuredDocumentation",
                    "src": "66778: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": 2461,
                  "name": "CustodyAllowanceChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2460,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2453,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2461,
                        "src": "67301:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2452,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "67301:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2455,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2461,
                        "src": "67336:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2454,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "67336:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2457,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oldAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2461,
                        "src": "67363:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2456,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "67363:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2459,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2461,
                        "src": "67385:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2458,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "67385:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67300:106:0"
                  },
                  "src": "67271:136:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2462,
                    "nodeType": "StructuredDocumentation",
                    "src": "67413: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": 2468,
                  "name": "LPStatusChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2467,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2464,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2468,
                        "src": "67684:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2463,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "67684:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2466,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2468,
                        "src": "67719:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2465,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "67719:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67683:48:0"
                  },
                  "src": "67662:70:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2469,
                    "nodeType": "StructuredDocumentation",
                    "src": "67738: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": 2473,
                  "name": "LiquidityCapSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2472,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2471,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newLiquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2473,
                        "src": "67918:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2470,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "67918:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67917:25:0"
                  },
                  "src": "67896:47:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2474,
                    "nodeType": "StructuredDocumentation",
                    "src": "67949: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": 2478,
                  "name": "LockupPeriodSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2477,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2476,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2478,
                        "src": "68126:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2475,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "68126:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68125:25:0"
                  },
                  "src": "68104:47:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2479,
                    "nodeType": "StructuredDocumentation",
                    "src": "68157: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": 2483,
                  "name": "StakingFeeSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2482,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2481,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newStakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2483,
                        "src": "68352:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2480,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "68352:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68351:23:0"
                  },
                  "src": "68332:43:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2484,
                    "nodeType": "StructuredDocumentation",
                    "src": "68381: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": 2488,
                  "name": "PoolStateChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2487,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2486,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "state",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2488,
                        "src": "68551:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$2406",
                          "typeString": "enum IPool.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 2485,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2406,
                          "src": "68551:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$2406",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68550:13:0"
                  },
                  "src": "68528:36:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2489,
                    "nodeType": "StructuredDocumentation",
                    "src": "68570: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": 2495,
                  "name": "Cooldown",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2494,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2491,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2495,
                        "src": "68855:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2490,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "68855:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2493,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "cooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2495,
                        "src": "68890:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2492,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "68890:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68854:53:0"
                  },
                  "src": "68840:68:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2496,
                    "nodeType": "StructuredDocumentation",
                    "src": "68914: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": 2500,
                  "name": "PoolOpenedToPublic",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2499,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2498,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "isOpen",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2500,
                        "src": "69127:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2497,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "69127:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69126:13:0"
                  },
                  "src": "69102:38:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2501,
                    "nodeType": "StructuredDocumentation",
                    "src": "69146: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": 2507,
                  "name": "PoolAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2506,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2503,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2507,
                        "src": "69373:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2502,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69373:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2505,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2507,
                        "src": "69400:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2504,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "69400:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69372:41:0"
                  },
                  "src": "69354:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2508,
                    "nodeType": "StructuredDocumentation",
                    "src": "69420: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": 2514,
                  "name": "DepositDateUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2513,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2510,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2514,
                        "src": "69703:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2509,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69703:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2512,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "depositDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2514,
                        "src": "69738:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2511,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "69738:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69702:56:0"
                  },
                  "src": "69678:81:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2515,
                    "nodeType": "StructuredDocumentation",
                    "src": "69765: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": 2521,
                  "name": "TotalCustodyAllowanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2520,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2517,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2521,
                        "src": "70108:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2516,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "70108:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2519,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newTotalAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2521,
                        "src": "70143:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2518,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "70143:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70107:62:0"
                  },
                  "src": "70073:97:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2522,
                    "nodeType": "StructuredDocumentation",
                    "src": "70176: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": 2534,
                  "name": "DefaultSuffered",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2533,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2524,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2534,
                        "src": "70764:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2523,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "70764:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2526,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "defaultSuffered",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2534,
                        "src": "70794:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2525,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "70794:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2528,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "bptsBurned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2534,
                        "src": "70827:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2527,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "70827:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2530,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "bptsReturned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2534,
                        "src": "70855:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2529,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "70855:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2532,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAssetRecoveredFromBurn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2534,
                        "src": "70885:39:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2531,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "70885:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70754:176:0"
                  },
                  "src": "70733:198:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2535,
                    "nodeType": "StructuredDocumentation",
                    "src": "70937:65:0",
                    "text": "@dev The factory type of `DebtLockerFactory`."
                  },
                  "functionSelector": "174a5be4",
                  "id": 2540,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2536,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "71026:2:0"
                  },
                  "returnParameters": {
                    "id": 2539,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2538,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2540,
                        "src": "71052:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2537,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "71052:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "71051:7:0"
                  },
                  "scope": 2866,
                  "src": "71007:52:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2541,
                    "nodeType": "StructuredDocumentation",
                    "src": "71065:100:0",
                    "text": "@dev The asset deposited by Lenders into the LiquidityLocker, for funding Loans."
                  },
                  "functionSelector": "209b2bca",
                  "id": 2546,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2542,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "71193:2:0"
                  },
                  "returnParameters": {
                    "id": 2545,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2544,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2546,
                        "src": "71219:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 2543,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "71219:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "71218:8:0"
                  },
                  "scope": 2866,
                  "src": "71170:57:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2547,
                    "nodeType": "StructuredDocumentation",
                    "src": "71233:91:0",
                    "text": "@dev The Pool Delegate address, maintains full authority over the Pool."
                  },
                  "functionSelector": "4046af2b",
                  "id": 2552,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolDelegate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2548,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "71350:2:0"
                  },
                  "returnParameters": {
                    "id": 2551,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2550,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2552,
                        "src": "71376:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2549,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "71376:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "71375:9:0"
                  },
                  "scope": 2866,
                  "src": "71329:56:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2553,
                    "nodeType": "StructuredDocumentation",
                    "src": "71391:138:0",
                    "text": "@dev The address of the asset deposited by Stakers into the StakeLocker (BPTs), for liquidation during default events."
                  },
                  "functionSelector": "9759164a",
                  "id": 2558,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2554,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "71558:2:0"
                  },
                  "returnParameters": {
                    "id": 2557,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2556,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2558,
                        "src": "71584:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2555,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "71584:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "71583:9:0"
                  },
                  "scope": 2866,
                  "src": "71534:59:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2559,
                    "nodeType": "StructuredDocumentation",
                    "src": "71599:138:0",
                    "text": "@dev The address of the asset deposited by Stakers into the StakeLocker (BPTs), for liquidation during default events."
                  },
                  "functionSelector": "80cd916d",
                  "id": 2564,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2560,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "71761:2:0"
                  },
                  "returnParameters": {
                    "id": 2563,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2562,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2564,
                        "src": "71787:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2561,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "71787:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "71786:9:0"
                  },
                  "scope": 2866,
                  "src": "71742:54:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2565,
                    "nodeType": "StructuredDocumentation",
                    "src": "71802:80:0",
                    "text": "@dev The address of the StakeLocker, escrowing `stakeAsset`."
                  },
                  "functionSelector": "033b1cf0",
                  "id": 2570,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2566,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "71907:2:0"
                  },
                  "returnParameters": {
                    "id": 2569,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2568,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2570,
                        "src": "71933:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2567,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "71933:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "71932:9:0"
                  },
                  "scope": 2866,
                  "src": "71887:55:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2571,
                    "nodeType": "StructuredDocumentation",
                    "src": "71948:61:0",
                    "text": "@dev The factory that deployed this Loan."
                  },
                  "functionSelector": "0d49b38c",
                  "id": 2576,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "superFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2572,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72035:2:0"
                  },
                  "returnParameters": {
                    "id": 2575,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2574,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2576,
                        "src": "72061:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2573,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "72061:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72060:9:0"
                  },
                  "scope": 2866,
                  "src": "72014:56:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2577,
                    "nodeType": "StructuredDocumentation",
                    "src": "72076:64:0",
                    "text": "@dev The fee Stakers earn (in basis points)."
                  },
                  "functionSelector": "eff98843",
                  "id": 2582,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakingFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2578,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72164:2:0"
                  },
                  "returnParameters": {
                    "id": 2581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2580,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2582,
                        "src": "72190:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2579,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72190:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72189:9:0"
                  },
                  "scope": 2866,
                  "src": "72145:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2583,
                    "nodeType": "StructuredDocumentation",
                    "src": "72205:75:0",
                    "text": "@dev The fee the Pool Delegate earns (in basis points)."
                  },
                  "functionSelector": "b69410de",
                  "id": 2588,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "delegateFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2584,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72305:2:0"
                  },
                  "returnParameters": {
                    "id": 2587,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2586,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2588,
                        "src": "72331:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2585,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72331:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72330:9:0"
                  },
                  "scope": 2866,
                  "src": "72285:55:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2589,
                    "nodeType": "StructuredDocumentation",
                    "src": "72346:71:0",
                    "text": "@dev The sum of all outstanding principal on Loans."
                  },
                  "functionSelector": "ac641655",
                  "id": 2594,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "principalOut",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2590,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72443:2:0"
                  },
                  "returnParameters": {
                    "id": 2593,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2592,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2594,
                        "src": "72469:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2591,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72469:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72468:9:0"
                  },
                  "scope": 2866,
                  "src": "72422:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2595,
                    "nodeType": "StructuredDocumentation",
                    "src": "72484:77:0",
                    "text": "@dev The amount of liquidity tokens accepted by the Pool."
                  },
                  "functionSelector": "76687d3d",
                  "id": 2600,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityCap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2596,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72587:2:0"
                  },
                  "returnParameters": {
                    "id": 2599,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2598,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2600,
                        "src": "72613:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2597,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72613:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72612:9:0"
                  },
                  "scope": 2866,
                  "src": "72566:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2601,
                    "nodeType": "StructuredDocumentation",
                    "src": "72628:119:0",
                    "text": "@dev The period of time from an account's deposit date during which they cannot withdraw any funds."
                  },
                  "functionSelector": "ee947a7c",
                  "id": 2606,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2602,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72773:2:0"
                  },
                  "returnParameters": {
                    "id": 2605,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2604,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2606,
                        "src": "72799:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2603,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72799:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72798:9:0"
                  },
                  "scope": 2866,
                  "src": "72752:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2607,
                    "nodeType": "StructuredDocumentation",
                    "src": "72814:80:0",
                    "text": "@dev Whether the Pool is open to the public for LP deposits."
                  },
                  "functionSelector": "1831ccf2",
                  "id": 2612,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2608,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72920:2:0"
                  },
                  "returnParameters": {
                    "id": 2611,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2610,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2612,
                        "src": "72946:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2609,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "72946:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72945:6:0"
                  },
                  "scope": 2866,
                  "src": "72899:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2613,
                    "nodeType": "StructuredDocumentation",
                    "src": "72958:47:0",
                    "text": "@dev The state of the Pool."
                  },
                  "functionSelector": "641ad8a9",
                  "id": 2618,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolState",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2614,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "73028:2:0"
                  },
                  "returnParameters": {
                    "id": 2617,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2616,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2618,
                        "src": "73054:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$2406",
                          "typeString": "enum IPool.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 2615,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2406,
                          "src": "73054:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$2406",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73053:7:0"
                  },
                  "scope": 2866,
                  "src": "73010:51:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2619,
                    "nodeType": "StructuredDocumentation",
                    "src": "73067: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": 2626,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "depositDate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2622,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2621,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2626,
                        "src": "73296:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2620,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "73296:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73295:17:0"
                  },
                  "returnParameters": {
                    "id": 2625,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2624,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2626,
                        "src": "73336:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2623,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "73336:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73335:9:0"
                  },
                  "scope": 2866,
                  "src": "73275:70:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2627,
                    "nodeType": "StructuredDocumentation",
                    "src": "73351: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": 2636,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "debtLockers",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2632,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2629,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2636,
                        "src": "73610:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2628,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "73610:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2631,
                        "mutability": "mutable",
                        "name": "debtLockerFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2636,
                        "src": "73624:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2630,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "73624:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73609:41:0"
                  },
                  "returnParameters": {
                    "id": 2635,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2634,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2636,
                        "src": "73674:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2633,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "73674:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73673:9:0"
                  },
                  "scope": 2866,
                  "src": "73589:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2637,
                    "nodeType": "StructuredDocumentation",
                    "src": "73689: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": 2644,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolAdmins",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2640,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2639,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2644,
                        "src": "73887:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2638,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "73887:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73886:19:0"
                  },
                  "returnParameters": {
                    "id": 2643,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2642,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2644,
                        "src": "73929:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2641,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "73929:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73928:6:0"
                  },
                  "scope": 2866,
                  "src": "73867:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2645,
                    "nodeType": "StructuredDocumentation",
                    "src": "73941:155:0",
                    "text": "@param  liquidityProvider The address of a LiquidityProvider.\n@return Whether `liquidityProvider` has early access to the Pool."
                  },
                  "functionSelector": "c59e3959",
                  "id": 2652,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowedLiquidityProviders",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2648,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2647,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2652,
                        "src": "74136:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2646,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "74136:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "74135:27:0"
                  },
                  "returnParameters": {
                    "id": 2651,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2650,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2652,
                        "src": "74186:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2649,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "74186:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "74185:6:0"
                  },
                  "scope": 2866,
                  "src": "74101:91:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2653,
                    "nodeType": "StructuredDocumentation",
                    "src": "74198: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": 2660,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawCooldown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2656,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2655,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2660,
                        "src": "74411:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2654,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "74411:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "74410:27:0"
                  },
                  "returnParameters": {
                    "id": 2659,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2658,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2660,
                        "src": "74461:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2657,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "74461:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "74460:9:0"
                  },
                  "scope": 2866,
                  "src": "74385:85:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2661,
                    "nodeType": "StructuredDocumentation",
                    "src": "74476: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": 2670,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "custodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2666,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2663,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2670,
                        "src": "74711:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2662,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "74711:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2665,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2670,
                        "src": "74728:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2664,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "74728:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "74710:36:0"
                  },
                  "returnParameters": {
                    "id": 2669,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2668,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2670,
                        "src": "74770:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2667,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "74770:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "74769:9:0"
                  },
                  "scope": 2866,
                  "src": "74685:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2671,
                    "nodeType": "StructuredDocumentation",
                    "src": "74785: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": 2678,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2674,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2673,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2678,
                        "src": "75009:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2672,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75009:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "75008:17:0"
                  },
                  "returnParameters": {
                    "id": 2677,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2676,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2678,
                        "src": "75049:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2675,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "75049:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "75048:9:0"
                  },
                  "scope": 2866,
                  "src": "74978:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2679,
                    "nodeType": "StructuredDocumentation",
                    "src": "75064: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": 2682,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "finalize",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2680,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "75342:2:0"
                  },
                  "returnParameters": {
                    "id": 2681,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "75353:0:0"
                  },
                  "scope": 2866,
                  "src": "75325:29:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2683,
                    "nodeType": "StructuredDocumentation",
                    "src": "75360: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": 2692,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2690,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2685,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2692,
                        "src": "75843:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2684,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75843:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2687,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2692,
                        "src": "75857:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2686,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75857:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2689,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2692,
                        "src": "75876:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2688,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "75876:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "75842:46:0"
                  },
                  "returnParameters": {
                    "id": 2691,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "75897:0:0"
                  },
                  "scope": 2866,
                  "src": "75825:73:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2693,
                    "nodeType": "StructuredDocumentation",
                    "src": "75904: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": 2700,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "triggerDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2698,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2695,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2700,
                        "src": "76449:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2694,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "76449:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2697,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2700,
                        "src": "76463:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2696,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "76463:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "76448:33:0"
                  },
                  "returnParameters": {
                    "id": 2699,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "76490:0:0"
                  },
                  "scope": 2866,
                  "src": "76425:66:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2701,
                    "nodeType": "StructuredDocumentation",
                    "src": "76497: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": 2712,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "claim",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2706,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2703,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2712,
                        "src": "77354:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2702,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "77354:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2705,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2712,
                        "src": "77368:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2704,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "77368:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "77353:33:0"
                  },
                  "returnParameters": {
                    "id": 2711,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2710,
                        "mutability": "mutable",
                        "name": "claimInfo",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2712,
                        "src": "77405:27:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                          "typeString": "uint256[7]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2707,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "77405:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2709,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 2708,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "77413:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "77405:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                            "typeString": "uint256[7]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "77404:29:0"
                  },
                  "scope": 2866,
                  "src": "77339:95:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2713,
                    "nodeType": "StructuredDocumentation",
                    "src": "77440: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": 2716,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deactivate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2714,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "77743:2:0"
                  },
                  "returnParameters": {
                    "id": 2715,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "77754:0:0"
                  },
                  "scope": 2866,
                  "src": "77724:31:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2717,
                    "nodeType": "StructuredDocumentation",
                    "src": "77765: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": 2722,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLiquidityCap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2720,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2719,
                        "mutability": "mutable",
                        "name": "newLiquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2722,
                        "src": "78037:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2718,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "78037:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "78036:25:0"
                  },
                  "returnParameters": {
                    "id": 2721,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "78070:0:0"
                  },
                  "scope": 2866,
                  "src": "78012:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2723,
                    "nodeType": "StructuredDocumentation",
                    "src": "78077: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": 2728,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2726,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2725,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2728,
                        "src": "78360:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2724,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "78360:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "78359:25:0"
                  },
                  "returnParameters": {
                    "id": 2727,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "78393:0:0"
                  },
                  "scope": 2866,
                  "src": "78335:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2729,
                    "nodeType": "StructuredDocumentation",
                    "src": "78400: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": 2734,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakingFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2732,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2731,
                        "mutability": "mutable",
                        "name": "newStakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2734,
                        "src": "78640:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2730,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "78640:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "78639:23:0"
                  },
                  "returnParameters": {
                    "id": 2733,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "78671:0:0"
                  },
                  "scope": 2866,
                  "src": "78617:55:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2735,
                    "nodeType": "StructuredDocumentation",
                    "src": "78678: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": 2742,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setAllowList",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2740,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2737,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2742,
                        "src": "79017:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2736,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "79017:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2739,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2742,
                        "src": "79034:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2738,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "79034:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "79016:30:0"
                  },
                  "returnParameters": {
                    "id": 2741,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "79055:0:0"
                  },
                  "scope": 2866,
                  "src": "78995:61:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2743,
                    "nodeType": "StructuredDocumentation",
                    "src": "79062: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": 2750,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2748,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2745,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2750,
                        "src": "79398:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2744,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "79398:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2747,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2750,
                        "src": "79417:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2746,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "79417:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "79397:33:0"
                  },
                  "returnParameters": {
                    "id": 2749,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "79439:0:0"
                  },
                  "scope": 2866,
                  "src": "79376:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2751,
                    "nodeType": "StructuredDocumentation",
                    "src": "79446: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": 2756,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setOpenToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2754,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2753,
                        "mutability": "mutable",
                        "name": "open",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2756,
                        "src": "79741:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2752,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "79741:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "79740:11:0"
                  },
                  "returnParameters": {
                    "id": 2755,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "79760:0:0"
                  },
                  "scope": 2866,
                  "src": "79716:45:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2757,
                    "nodeType": "StructuredDocumentation",
                    "src": "79767: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": 2762,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deposit",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2760,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2759,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2762,
                        "src": "80130:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2758,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "80130:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "80129:13:0"
                  },
                  "returnParameters": {
                    "id": 2761,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80151:0:0"
                  },
                  "scope": 2866,
                  "src": "80113:39:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2763,
                    "nodeType": "StructuredDocumentation",
                    "src": "80158: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": 2766,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "intendToWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2764,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80375:2:0"
                  },
                  "returnParameters": {
                    "id": 2765,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80386:0:0"
                  },
                  "scope": 2866,
                  "src": "80350:37:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2767,
                    "nodeType": "StructuredDocumentation",
                    "src": "80393: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": 2770,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2768,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80567:2:0"
                  },
                  "returnParameters": {
                    "id": 2769,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80578:0:0"
                  },
                  "scope": 2866,
                  "src": "80544:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2771,
                    "nodeType": "StructuredDocumentation",
                    "src": "80585: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": 2776,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2774,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2773,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2776,
                        "src": "80853:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2772,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "80853:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "80852:13:0"
                  },
                  "returnParameters": {
                    "id": 2775,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80874:0:0"
                  },
                  "scope": 2866,
                  "src": "80835:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": null,
                  "documentation": {
                    "id": 2777,
                    "nodeType": "StructuredDocumentation",
                    "src": "80881: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": 2781,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2779,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "81099:8:0"
                  },
                  "parameters": {
                    "id": 2778,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "81087:2:0"
                  },
                  "returnParameters": {
                    "id": 2780,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "81107:0:0"
                  },
                  "scope": 2866,
                  "src": "81065:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2782,
                    "nodeType": "StructuredDocumentation",
                    "src": "81114: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": 2789,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2787,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2784,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2789,
                        "src": "81600:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2783,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "81600:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2786,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2789,
                        "src": "81619:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2785,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "81619:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81599:35:0"
                  },
                  "returnParameters": {
                    "id": 2788,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "81643:0:0"
                  },
                  "scope": 2866,
                  "src": "81566:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2790,
                    "nodeType": "StructuredDocumentation",
                    "src": "81650: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": 2799,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2797,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2792,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2799,
                        "src": "82349:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2791,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "82349:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2794,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2799,
                        "src": "82363:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2793,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "82363:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2796,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2799,
                        "src": "82375:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2795,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "82375:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "82348:42:0"
                  },
                  "returnParameters": {
                    "id": 2798,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "82399:0:0"
                  },
                  "scope": 2866,
                  "src": "82320:80:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2800,
                    "nodeType": "StructuredDocumentation",
                    "src": "82406: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": 2805,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "reclaimERC20",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2803,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2802,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2805,
                        "src": "82625:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2801,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "82625:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "82624:15:0"
                  },
                  "returnParameters": {
                    "id": 2804,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "82648:0:0"
                  },
                  "scope": 2866,
                  "src": "82603:46:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2806,
                    "nodeType": "StructuredDocumentation",
                    "src": "82659: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": 2819,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "BPTVal",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2815,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2808,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2819,
                        "src": "83108:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2807,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83108:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2810,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2819,
                        "src": "83132:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2809,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83132:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2812,
                        "mutability": "mutable",
                        "name": "_staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2819,
                        "src": "83165:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2811,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83165:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2814,
                        "mutability": "mutable",
                        "name": "_stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2819,
                        "src": "83190:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2813,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83190:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "83098:118:0"
                  },
                  "returnParameters": {
                    "id": 2818,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2817,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2819,
                        "src": "83240:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2816,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "83240:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "83239:9:0"
                  },
                  "scope": 2866,
                  "src": "83083:166:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2820,
                    "nodeType": "StructuredDocumentation",
                    "src": "83255: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": 2827,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isDepositAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2823,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2822,
                        "mutability": "mutable",
                        "name": "depositAmt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2827,
                        "src": "83501:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2821,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "83501:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "83500:20:0"
                  },
                  "returnParameters": {
                    "id": 2826,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2825,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2827,
                        "src": "83544:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2824,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "83544:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "83543:6:0"
                  },
                  "scope": 2866,
                  "src": "83475:75:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2828,
                    "nodeType": "StructuredDocumentation",
                    "src": "83556: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": 2841,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getInitialStakeRequirements",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2829,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "84055:2:0"
                  },
                  "returnParameters": {
                    "id": 2840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2831,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2841,
                        "src": "84081:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2830,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "84081:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2833,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2841,
                        "src": "84090:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2832,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "84090:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2835,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2841,
                        "src": "84099:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2834,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "84099:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2837,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2841,
                        "src": "84105:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2836,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "84105:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2839,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2841,
                        "src": "84114:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2838,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "84114:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84080:42:0"
                  },
                  "scope": 2866,
                  "src": "84019:104:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2842,
                    "nodeType": "StructuredDocumentation",
                    "src": "84129: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": 2859,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolSharesRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2853,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2844,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2859,
                        "src": "84866:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2843,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84866:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2846,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2859,
                        "src": "84890:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2845,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84890:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2848,
                        "mutability": "mutable",
                        "name": "_staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2859,
                        "src": "84923:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2847,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84923:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2850,
                        "mutability": "mutable",
                        "name": "_stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2859,
                        "src": "84948:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2849,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84948:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2852,
                        "mutability": "mutable",
                        "name": "_liquidityAssetAmountRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2859,
                        "src": "84978:37:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2851,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "84978:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84856:165:0"
                  },
                  "returnParameters": {
                    "id": 2858,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2855,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2859,
                        "src": "85045:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2854,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "85045:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2857,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2859,
                        "src": "85054:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2856,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "85054:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "85044:18:0"
                  },
                  "scope": 2866,
                  "src": "84826:237:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2860,
                    "nodeType": "StructuredDocumentation",
                    "src": "85069:124:0",
                    "text": "@dev    Checks that the Pool state is `Finalized`.\n@return Whether the Pool is in a Finalized state."
                  },
                  "functionSelector": "4f85221a",
                  "id": 2865,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isPoolFinalized",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2861,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "85222:2:0"
                  },
                  "returnParameters": {
                    "id": 2864,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2863,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2865,
                        "src": "85248:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2862,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "85248:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "85247:6:0"
                  },
                  "scope": 2866,
                  "src": "85198:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5010,
              "src": "64662:20595:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2867,
                "nodeType": "StructuredDocumentation",
                "src": "85437:43:0",
                "text": "@title PoolFactory instantiates Pools."
              },
              "fullyImplemented": false,
              "id": 2990,
              "linearizedBaseContracts": [
                2990
              ],
              "name": "IPoolFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2868,
                    "nodeType": "StructuredDocumentation",
                    "src": "85510: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": 2874,
                  "name": "PoolFactoryAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2873,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2870,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "poolFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2874,
                        "src": "85794:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2869,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "85794:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2872,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2874,
                        "src": "85828:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2871,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "85828:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "85793:48:0"
                  },
                  "src": "85768:74:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2875,
                    "nodeType": "StructuredDocumentation",
                    "src": "85848: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": 2899,
                  "name": "PoolCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2898,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2877,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86661:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2876,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86661:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2879,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "delegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86691:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2878,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86691:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2881,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86725:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2880,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86725:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2883,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86757:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2882,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86757:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2885,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86785:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2884,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86785:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2887,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86818:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2886,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86818:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2889,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86847:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2888,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "86847:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2891,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86875:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2890,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "86875:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2893,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86904:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2892,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "86904:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2895,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86934:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2894,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "86934:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2897,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2899,
                        "src": "86956:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2896,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "86956:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "86651:325:0"
                  },
                  "src": "86634:343:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2900,
                    "nodeType": "StructuredDocumentation",
                    "src": "86983:70:0",
                    "text": "@dev The factory type of `LiquidityLockerFactory`."
                  },
                  "functionSelector": "c5ba73ed",
                  "id": 2905,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "LL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2901,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87077:2:0"
                  },
                  "returnParameters": {
                    "id": 2904,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2903,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2905,
                        "src": "87103:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2902,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87103:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87102:7:0"
                  },
                  "scope": 2990,
                  "src": "87058:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2906,
                    "nodeType": "StructuredDocumentation",
                    "src": "87116:66:0",
                    "text": "@dev The factory type of `StakeLockerFactory`."
                  },
                  "functionSelector": "9f71f14a",
                  "id": 2911,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "SL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2907,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87206:2:0"
                  },
                  "returnParameters": {
                    "id": 2910,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2909,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2911,
                        "src": "87232:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2908,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87232:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87231:7:0"
                  },
                  "scope": 2990,
                  "src": "87187:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2912,
                    "nodeType": "StructuredDocumentation",
                    "src": "87245:69:0",
                    "text": "@dev The incrementor for number of Pools created."
                  },
                  "functionSelector": "945164e7",
                  "id": 2917,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolsCreated",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2913,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87340:2:0"
                  },
                  "returnParameters": {
                    "id": 2916,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2915,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2917,
                        "src": "87366:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2914,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "87366:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87365:9:0"
                  },
                  "scope": 2990,
                  "src": "87319:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2918,
                    "nodeType": "StructuredDocumentation",
                    "src": "87381:59:0",
                    "text": "@dev The current MapleGlobals instance."
                  },
                  "functionSelector": "c3124525",
                  "id": 2923,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "globals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2919,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87461:2:0"
                  },
                  "returnParameters": {
                    "id": 2922,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2921,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2923,
                        "src": "87487:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 2920,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2371,
                          "src": "87487:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87486:15:0"
                  },
                  "scope": 2990,
                  "src": "87445:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2924,
                    "nodeType": "StructuredDocumentation",
                    "src": "87508:105:0",
                    "text": "@param  index An index of a Pool.\n@return The address of the Pool at `index`."
                  },
                  "functionSelector": "ac4afa38",
                  "id": 2931,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pools",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2927,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2926,
                        "mutability": "mutable",
                        "name": "index",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2931,
                        "src": "87633:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2925,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "87633:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87632:15:0"
                  },
                  "returnParameters": {
                    "id": 2930,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2929,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2931,
                        "src": "87671:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2928,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "87671:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87670:9:0"
                  },
                  "scope": 2990,
                  "src": "87618:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2932,
                    "nodeType": "StructuredDocumentation",
                    "src": "87686:116:0",
                    "text": "@param  pool The address of a Pool.\n@return Whether the contract at `address` is a Pool."
                  },
                  "functionSelector": "5b16ebb7",
                  "id": 2939,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2935,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2934,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2939,
                        "src": "87823:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2933,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "87823:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87822:14:0"
                  },
                  "returnParameters": {
                    "id": 2938,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2937,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2939,
                        "src": "87860:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2936,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "87860:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87859:6:0"
                  },
                  "scope": 2990,
                  "src": "87807:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2940,
                    "nodeType": "StructuredDocumentation",
                    "src": "87872: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": 2947,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolFactoryAdmins",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2943,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2942,
                        "mutability": "mutable",
                        "name": "poolFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2947,
                        "src": "88101:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2941,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "88101:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88100:26:0"
                  },
                  "returnParameters": {
                    "id": 2946,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2945,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2947,
                        "src": "88150:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2944,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "88150:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88149:6:0"
                  },
                  "scope": 2990,
                  "src": "88074:82:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2948,
                    "nodeType": "StructuredDocumentation",
                    "src": "88162: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": 2953,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGlobals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2951,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2950,
                        "mutability": "mutable",
                        "name": "newGlobals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2953,
                        "src": "88359:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2949,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "88359:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88358:20:0"
                  },
                  "returnParameters": {
                    "id": 2952,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "88387:0:0"
                  },
                  "scope": 2990,
                  "src": "88339:49:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2954,
                    "nodeType": "StructuredDocumentation",
                    "src": "88394: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": 2973,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2969,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2956,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2973,
                        "src": "89163:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2955,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "89163:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2958,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2973,
                        "src": "89195:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2957,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "89195:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2960,
                        "mutability": "mutable",
                        "name": "slFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2973,
                        "src": "89223:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2959,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "89223:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2962,
                        "mutability": "mutable",
                        "name": "llFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2973,
                        "src": "89250:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2961,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "89250:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2964,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2973,
                        "src": "89277:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2963,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "89277:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2966,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2973,
                        "src": "89305:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2965,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "89305:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2968,
                        "mutability": "mutable",
                        "name": "liquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2973,
                        "src": "89334:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2967,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "89334:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "89153:207:0"
                  },
                  "returnParameters": {
                    "id": 2972,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2971,
                        "mutability": "mutable",
                        "name": "poolAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2973,
                        "src": "89379:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2970,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "89379:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "89378:21:0"
                  },
                  "scope": 2990,
                  "src": "89134:266:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2974,
                    "nodeType": "StructuredDocumentation",
                    "src": "89406: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": 2981,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolFactoryAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2979,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2976,
                        "mutability": "mutable",
                        "name": "poolFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "89796:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2975,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "89796:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2978,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "89822:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2977,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "89822:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "89795:40:0"
                  },
                  "returnParameters": {
                    "id": 2980,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "89844:0:0"
                  },
                  "scope": 2990,
                  "src": "89767:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2982,
                    "nodeType": "StructuredDocumentation",
                    "src": "89851: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": 2985,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2983,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90054:2:0"
                  },
                  "returnParameters": {
                    "id": 2984,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90065:0:0"
                  },
                  "scope": 2990,
                  "src": "90040:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2986,
                    "nodeType": "StructuredDocumentation",
                    "src": "90072: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": 2989,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2987,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90282:2:0"
                  },
                  "returnParameters": {
                    "id": 2988,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90293:0:0"
                  },
                  "scope": 2990,
                  "src": "90266:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5010,
              "src": "85480:4817:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 2992,
                    "name": "IExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1507,
                    "src": "90730:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExtendedFDT_$1507",
                      "typeString": "contract IExtendedFDT"
                    }
                  },
                  "id": 2993,
                  "nodeType": "InheritanceSpecifier",
                  "src": "90730:12:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1507
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 2991,
                "nodeType": "StructuredDocumentation",
                "src": "90611:90:0",
                "text": "@title StakeLockerFDT inherits ExtendedFDT and accounts for gains/losses for Stakers."
              },
              "fullyImplemented": false,
              "id": 3018,
              "linearizedBaseContracts": [
                3018,
                1507,
                141,
                77
              ],
              "name": "IStakeLockerFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 2994,
                    "nodeType": "StructuredDocumentation",
                    "src": "90750:50:0",
                    "text": "@dev The ERC-2222 Funds Token."
                  },
                  "functionSelector": "63f04b15",
                  "id": 2999,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2995,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90824:2:0"
                  },
                  "returnParameters": {
                    "id": 2998,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2997,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2999,
                        "src": "90850:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 2996,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "90850:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "90849:8:0"
                  },
                  "scope": 3018,
                  "src": "90805:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3000,
                    "nodeType": "StructuredDocumentation",
                    "src": "90864:60:0",
                    "text": "@dev The sum of all unrecognized losses."
                  },
                  "functionSelector": "aedc78c3",
                  "id": 3005,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bptLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3001,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90947:2:0"
                  },
                  "returnParameters": {
                    "id": 3004,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3003,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3005,
                        "src": "90973:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3002,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "90973:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "90972:9:0"
                  },
                  "scope": 3018,
                  "src": "90929:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3006,
                    "nodeType": "StructuredDocumentation",
                    "src": "90988:89:0",
                    "text": "@dev The amount of losses present and accounted for in this contract."
                  },
                  "functionSelector": "fec984e3",
                  "id": 3011,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3007,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91104:2:0"
                  },
                  "returnParameters": {
                    "id": 3010,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3009,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3011,
                        "src": "91130:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3008,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "91130:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "91129:9:0"
                  },
                  "scope": 3018,
                  "src": "91082:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3012,
                    "nodeType": "StructuredDocumentation",
                    "src": "91145:123:0",
                    "text": "@dev The amount of `fundsToken` (Liquidity Asset) currently present and accounted for in this contract."
                  },
                  "functionSelector": "a9691f3f",
                  "id": 3017,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3013,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91299:2:0"
                  },
                  "returnParameters": {
                    "id": 3016,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3015,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3017,
                        "src": "91325:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3014,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "91325:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "91324:9:0"
                  },
                  "scope": 3018,
                  "src": "91273:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5010,
              "src": "90701:636:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3019,
                "nodeType": "StructuredDocumentation",
                "src": "91440:67:0",
                "text": " @dev Collection of functions related to the address type"
              },
              "fullyImplemented": true,
              "id": 3260,
              "linearizedBaseContracts": [
                3260
              ],
              "name": "Address",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 3035,
                    "nodeType": "Block",
                    "src": "92166:347:0",
                    "statements": [
                      {
                        "assignments": [
                          3028
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3028,
                            "mutability": "mutable",
                            "name": "size",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3035,
                            "src": "92363:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3027,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "92363:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3029,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "92363:12:0"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "92450:32:0",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "92452:28:0",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "account",
                                    "nodeType": "YulIdentifier",
                                    "src": "92472:7:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "extcodesize",
                                  "nodeType": "YulIdentifier",
                                  "src": "92460:11:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "92460:20:0"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "92452:4:0"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 3022,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "92472:7:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3028,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "92452:4:0",
                            "valueSize": 1
                          }
                        ],
                        "id": 3030,
                        "nodeType": "InlineAssembly",
                        "src": "92441:41:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3033,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3031,
                            "name": "size",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3028,
                            "src": "92498:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3032,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "92505:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "92498:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 3026,
                        "id": 3034,
                        "nodeType": "Return",
                        "src": "92491:15:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3020,
                    "nodeType": "StructuredDocumentation",
                    "src": "91530: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": 3036,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isContract",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3023,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3022,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3036,
                        "src": "92120:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3021,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "92120:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "92119:17:0"
                  },
                  "returnParameters": {
                    "id": 3026,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3025,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3036,
                        "src": "92160:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3024,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "92160:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "92159:6:0"
                  },
                  "scope": 3260,
                  "src": "92100:413:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3069,
                    "nodeType": "Block",
                    "src": "93501:320:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3051,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 3047,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "93527:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$3260",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$3260",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 3046,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "93519:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 3045,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "93519:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 3048,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "93519:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 3049,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "93519:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3050,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3041,
                                "src": "93544:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "93519:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
                              "id": 3052,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "93552: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": 3044,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "93511:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "93511:73:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3054,
                        "nodeType": "ExpressionStatement",
                        "src": "93511:73:0"
                      },
                      {
                        "assignments": [
                          3056,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3056,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3069,
                            "src": "93673:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3055,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "93673:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 3063,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 3061,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "93723: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": 3057,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3039,
                                "src": "93691:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 3058,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "93691: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": 3060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "argumentTypes": null,
                                "id": 3059,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3041,
                                "src": "93714:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "93691: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": 3062,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "93691:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "93672:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3065,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3056,
                              "src": "93744:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
                              "id": 3066,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "93753: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": 3064,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "93736:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "93736:78:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3068,
                        "nodeType": "ExpressionStatement",
                        "src": "93736:78:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3037,
                    "nodeType": "StructuredDocumentation",
                    "src": "92519: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": 3070,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sendValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3042,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3039,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3070,
                        "src": "93449:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 3038,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "93449:15:0",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3041,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3070,
                        "src": "93476:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3040,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "93476:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "93448:43:0"
                  },
                  "returnParameters": {
                    "id": 3043,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "93501:0:0"
                  },
                  "scope": 3260,
                  "src": "93430:391:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3086,
                    "nodeType": "Block",
                    "src": "94651:82:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3081,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3073,
                              "src": "94679:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3082,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3075,
                              "src": "94687:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 3083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "94693: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": 3080,
                            "name": "functionCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3087,
                              3107
                            ],
                            "referencedDeclaration": 3107,
                            "src": "94666: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": 3084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "94666:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3079,
                        "id": 3085,
                        "nodeType": "Return",
                        "src": "94659:67:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3071,
                    "nodeType": "StructuredDocumentation",
                    "src": "93827: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": 3087,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3076,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3073,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3087,
                        "src": "94584:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3072,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "94584:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3075,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3087,
                        "src": "94600:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3074,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "94600:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "94583:35:0"
                  },
                  "returnParameters": {
                    "id": 3079,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3078,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3087,
                        "src": "94637:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3077,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "94637:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "94636:14:0"
                  },
                  "scope": 3260,
                  "src": "94562:171:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3106,
                    "nodeType": "Block",
                    "src": "95072:76:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3100,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3090,
                              "src": "95111:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3101,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3092,
                              "src": "95119:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 3102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "95125:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 3103,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3094,
                              "src": "95128: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": 3099,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3127,
                              3177
                            ],
                            "referencedDeclaration": 3177,
                            "src": "95089: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": 3104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "95089:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3098,
                        "id": 3105,
                        "nodeType": "Return",
                        "src": "95082:59:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3088,
                    "nodeType": "StructuredDocumentation",
                    "src": "94739: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": 3107,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3095,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3090,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3107,
                        "src": "94977:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3089,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "94977:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3092,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3107,
                        "src": "94993:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3091,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "94993:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3094,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3107,
                        "src": "95012:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3093,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "95012:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "94976:63:0"
                  },
                  "returnParameters": {
                    "id": 3098,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3097,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3107,
                        "src": "95058:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3096,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "95058:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "95057:14:0"
                  },
                  "scope": 3260,
                  "src": "94955:193:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3126,
                    "nodeType": "Block",
                    "src": "95623:111:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3120,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3110,
                              "src": "95662:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3121,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3112,
                              "src": "95670:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3122,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3114,
                              "src": "95676:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
                              "id": 3123,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "95683: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": 3119,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3127,
                              3177
                            ],
                            "referencedDeclaration": 3177,
                            "src": "95640: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": 3124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "95640:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3118,
                        "id": 3125,
                        "nodeType": "Return",
                        "src": "95633:94:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3108,
                    "nodeType": "StructuredDocumentation",
                    "src": "95154: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": 3127,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3110,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3127,
                        "src": "95541:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3109,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "95541:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3112,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3127,
                        "src": "95557:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3111,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "95557:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3114,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3127,
                        "src": "95576:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3113,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95576:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "95540:50:0"
                  },
                  "returnParameters": {
                    "id": 3118,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3117,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3127,
                        "src": "95609:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3116,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "95609:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "95608:14:0"
                  },
                  "scope": 3260,
                  "src": "95510:224:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3176,
                    "nodeType": "Block",
                    "src": "96123:382:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3148,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 3144,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "96149:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$3260",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$3260",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 3143,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "96141:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 3142,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "96141:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 3145,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "96141:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 3146,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "96141:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3147,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3134,
                                "src": "96166:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "96141:30:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
                              "id": 3149,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "96173: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": 3141,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "96133:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "96133:81:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3151,
                        "nodeType": "ExpressionStatement",
                        "src": "96133:81:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3154,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3130,
                                  "src": "96243:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3153,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3036,
                                "src": "96232:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 3155,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "96232:18:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 3156,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "96252: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": 3152,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "96224:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "96224:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3158,
                        "nodeType": "ExpressionStatement",
                        "src": "96224:60:0"
                      },
                      {
                        "assignments": [
                          3160,
                          3162
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3160,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3176,
                            "src": "96355:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3159,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "96355:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3162,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3176,
                            "src": "96369:23:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3161,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "96369:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3169,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3167,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3132,
                              "src": "96424: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": 3163,
                                "name": "target",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3130,
                                "src": "96396:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3164,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "96396: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": 3166,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "argumentTypes": null,
                                "id": 3165,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3134,
                                "src": "96416:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "96396: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": 3168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "96396:33:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "96354:75:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3171,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3160,
                              "src": "96464:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3172,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3162,
                              "src": "96473:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3173,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3136,
                              "src": "96485: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": 3170,
                            "name": "_verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3259,
                            "src": "96446: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": 3174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "96446:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3140,
                        "id": 3175,
                        "nodeType": "Return",
                        "src": "96439:59:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3128,
                    "nodeType": "StructuredDocumentation",
                    "src": "95740: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": 3177,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3130,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3177,
                        "src": "96013:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3129,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96013:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3132,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3177,
                        "src": "96029:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3131,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "96029:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3134,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3177,
                        "src": "96048:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "96048:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3136,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3177,
                        "src": "96063:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3135,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "96063:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "96012:78:0"
                  },
                  "returnParameters": {
                    "id": 3140,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3139,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3177,
                        "src": "96109:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3138,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "96109:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "96108:14:0"
                  },
                  "scope": 3260,
                  "src": "95982:523:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3193,
                    "nodeType": "Block",
                    "src": "96782:97:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3188,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3180,
                              "src": "96818:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3189,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3182,
                              "src": "96826:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
                              "id": 3190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "96832: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": 3187,
                            "name": "functionStaticCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3194,
                              3229
                            ],
                            "referencedDeclaration": 3229,
                            "src": "96799: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": 3191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "96799:73:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3186,
                        "id": 3192,
                        "nodeType": "Return",
                        "src": "96792:80:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3178,
                    "nodeType": "StructuredDocumentation",
                    "src": "96511:166:0",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 3194,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3183,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3180,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3194,
                        "src": "96710:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3179,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96710:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3182,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3194,
                        "src": "96726:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3181,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "96726:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "96709:35:0"
                  },
                  "returnParameters": {
                    "id": 3186,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3185,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3194,
                        "src": "96768:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3184,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "96768:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "96767:14:0"
                  },
                  "scope": 3260,
                  "src": "96682:197:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3228,
                    "nodeType": "Block",
                    "src": "97191:288:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3208,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3197,
                                  "src": "97220:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3207,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3036,
                                "src": "97209:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 3209,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "97209:18:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 3210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "97229: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": 3206,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "97201:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "97201:67:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3212,
                        "nodeType": "ExpressionStatement",
                        "src": "97201:67:0"
                      },
                      {
                        "assignments": [
                          3214,
                          3216
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3214,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3228,
                            "src": "97339:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3213,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "97339:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3216,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3228,
                            "src": "97353:23:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3215,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "97353:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3221,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3219,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3199,
                              "src": "97398: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": 3217,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3197,
                              "src": "97380:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 3218,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "staticcall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "97380: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": 3220,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "97380:23:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "97338:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3223,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3214,
                              "src": "97438:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3224,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3216,
                              "src": "97447:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3225,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3201,
                              "src": "97459: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": 3222,
                            "name": "_verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3259,
                            "src": "97420: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": 3226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "97420:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3205,
                        "id": 3227,
                        "nodeType": "Return",
                        "src": "97413:59:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3195,
                    "nodeType": "StructuredDocumentation",
                    "src": "96885: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": 3229,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3202,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3197,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3229,
                        "src": "97091:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3196,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "97091:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3199,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3229,
                        "src": "97107:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3198,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "97107:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3201,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3229,
                        "src": "97126:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3200,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "97126:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97090:63:0"
                  },
                  "returnParameters": {
                    "id": 3205,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3204,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3229,
                        "src": "97177:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3203,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "97177:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97176:14:0"
                  },
                  "scope": 3260,
                  "src": "97063:416:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3258,
                    "nodeType": "Block",
                    "src": "97614:596:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 3240,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3231,
                          "src": "97628:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3256,
                          "nodeType": "Block",
                          "src": "97685:519:0",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3247,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3244,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3233,
                                    "src": "97769:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 3245,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "97769:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 3246,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "97789:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "97769:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 3254,
                                "nodeType": "Block",
                                "src": "98141:53:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 3251,
                                          "name": "errorMessage",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3235,
                                          "src": "98166:12:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 3250,
                                        "name": "revert",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          -19,
                                          -19
                                        ],
                                        "referencedDeclaration": -19,
                                        "src": "98159:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                          "typeString": "function (string memory) pure"
                                        }
                                      },
                                      "id": 3252,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "98159:20:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 3253,
                                    "nodeType": "ExpressionStatement",
                                    "src": "98159:20:0"
                                  }
                                ]
                              },
                              "id": 3255,
                              "nodeType": "IfStatement",
                              "src": "97765:429:0",
                              "trueBody": {
                                "id": 3249,
                                "nodeType": "Block",
                                "src": "97792:343:0",
                                "statements": [
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "97976:145:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "97998:40:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "returndata",
                                                "nodeType": "YulIdentifier",
                                                "src": "98027:10:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "98021:5:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "98021:17:0"
                                          },
                                          "variables": [
                                            {
                                              "name": "returndata_size",
                                              "nodeType": "YulTypedName",
                                              "src": "98002:15:0",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "98070:2:0",
                                                    "type": "",
                                                    "value": "32"
                                                  },
                                                  {
                                                    "name": "returndata",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "98074:10:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "98066:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "98066:19:0"
                                              },
                                              {
                                                "name": "returndata_size",
                                                "nodeType": "YulIdentifier",
                                                "src": "98087:15:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "98059:6:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "98059:44:0"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "98059:44:0"
                                        }
                                      ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                      {
                                        "declaration": 3233,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "98027:10:0",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 3233,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "98074:10:0",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 3248,
                                    "nodeType": "InlineAssembly",
                                    "src": "97967:154:0"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "id": 3257,
                        "nodeType": "IfStatement",
                        "src": "97624:580:0",
                        "trueBody": {
                          "id": 3243,
                          "nodeType": "Block",
                          "src": "97637:42:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 3241,
                                "name": "returndata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3233,
                                "src": "97658:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 3239,
                              "id": 3242,
                              "nodeType": "Return",
                              "src": "97651:17:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 3259,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_verifyCallResult",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3236,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3231,
                        "mutability": "mutable",
                        "name": "success",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3259,
                        "src": "97512:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3230,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "97512:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3233,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3259,
                        "src": "97526:23:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3232,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "97526:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3235,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3259,
                        "src": "97551:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3234,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "97551:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97511:67:0"
                  },
                  "returnParameters": {
                    "id": 3239,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3238,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3259,
                        "src": "97600:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3237,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "97600:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97599:14:0"
                  },
                  "scope": 3260,
                  "src": "97485:725:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 5010,
              "src": "91508:6704:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3261,
                "nodeType": "StructuredDocumentation",
                "src": "98433: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": 3468,
              "linearizedBaseContracts": [
                3468
              ],
              "name": "SafeERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 3264,
                  "libraryName": {
                    "contractScope": null,
                    "id": 3262,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 379,
                    "src": "98921:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$379",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "98915:27:0",
                  "typeName": {
                    "id": 3263,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "98934:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 3267,
                  "libraryName": {
                    "contractScope": null,
                    "id": 3265,
                    "name": "Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3260,
                    "src": "98953:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Address_$3260",
                      "typeString": "library Address"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "98947:26:0",
                  "typeName": {
                    "id": 3266,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "98965:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                },
                {
                  "body": {
                    "id": 3288,
                    "nodeType": "Block",
                    "src": "99051:103:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3277,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3269,
                              "src": "99081:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3280,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3269,
                                      "src": "99111:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 3281,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "transfer",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 26,
                                    "src": "99111:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 3282,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "99111:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3283,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3271,
                                  "src": "99136:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3284,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3273,
                                  "src": "99140: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": 3278,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "99088:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3279,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "99088:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 3285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "99088: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": 3276,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3467,
                            "src": "99061:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 3286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "99061:86:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3287,
                        "nodeType": "ExpressionStatement",
                        "src": "99061:86:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 3289,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3274,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3269,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3289,
                        "src": "99001:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3268,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "99001:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3271,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3289,
                        "src": "99015:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3270,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "99015:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3273,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3289,
                        "src": "99027:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3272,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "99027:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "99000:41:0"
                  },
                  "returnParameters": {
                    "id": 3275,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "99051:0:0"
                  },
                  "scope": 3468,
                  "src": "98979:175:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3313,
                    "nodeType": "Block",
                    "src": "99250:113:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3301,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3291,
                              "src": "99280:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3304,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3291,
                                      "src": "99310:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 3305,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "transferFrom",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 58,
                                    "src": "99310: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": 3306,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "99310:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3307,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3293,
                                  "src": "99339:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3308,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3295,
                                  "src": "99345:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3309,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3297,
                                  "src": "99349: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": 3302,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "99287:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3303,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "99287:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 3310,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "99287: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": 3300,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3467,
                            "src": "99260:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 3311,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "99260:96:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3312,
                        "nodeType": "ExpressionStatement",
                        "src": "99260:96:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 3314,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3298,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3291,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3314,
                        "src": "99186:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3290,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "99186:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3293,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3314,
                        "src": "99200:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3292,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "99200:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3295,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3314,
                        "src": "99214:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3294,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "99214:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3297,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3314,
                        "src": "99226:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3296,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "99226:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "99185:55:0"
                  },
                  "returnParameters": {
                    "id": 3299,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "99250:0:0"
                  },
                  "scope": 3468,
                  "src": "99160:203:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3356,
                    "nodeType": "Block",
                    "src": "99699:537:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 3340,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3327,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 3325,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3321,
                                      "src": "99988:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 3326,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "99997:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "99988:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 3328,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "99987:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3338,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "id": 3333,
                                              "name": "this",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -28,
                                              "src": "100028:4:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_SafeERC20_$3468",
                                                "typeString": "library SafeERC20"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_contract$_SafeERC20_$3468",
                                                "typeString": "library SafeERC20"
                                              }
                                            ],
                                            "id": 3332,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "100020:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_address_$",
                                              "typeString": "type(address)"
                                            },
                                            "typeName": {
                                              "id": 3331,
                                              "name": "address",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "100020:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": null,
                                                "typeString": null
                                              }
                                            }
                                          },
                                          "id": 3334,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "100020:13:0",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 3335,
                                          "name": "spender",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3319,
                                          "src": "100035:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 3329,
                                          "name": "token",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3317,
                                          "src": "100004:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$77",
                                            "typeString": "contract IERC20"
                                          }
                                        },
                                        "id": 3330,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "allowance",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 36,
                                        "src": "100004:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                          "typeString": "function (address,address) view external returns (uint256)"
                                        }
                                      },
                                      "id": 3336,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "100004:39:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 3337,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "100047:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "100004:44:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 3339,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "100003:46:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "99987:62:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365",
                              "id": 3341,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "100063: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": 3324,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "99979:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3342,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "99979:150:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3343,
                        "nodeType": "ExpressionStatement",
                        "src": "99979:150:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3345,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3317,
                              "src": "100159:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3348,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3317,
                                      "src": "100189:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 3349,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46,
                                    "src": "100189:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 3350,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "100189:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3351,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3319,
                                  "src": "100213:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3352,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3321,
                                  "src": "100222: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": 3346,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "100166:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3347,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "100166:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 3353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "100166: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": 3344,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3467,
                            "src": "100139:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 3354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "100139:90:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3355,
                        "nodeType": "ExpressionStatement",
                        "src": "100139:90:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3315,
                    "nodeType": "StructuredDocumentation",
                    "src": "99369: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": 3357,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeApprove",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3322,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3317,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3357,
                        "src": "99644:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3316,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "99644:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3319,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3357,
                        "src": "99658:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3318,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "99658:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3321,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3357,
                        "src": "99675:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3320,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "99675:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "99643:46:0"
                  },
                  "returnParameters": {
                    "id": 3323,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "99699:0:0"
                  },
                  "scope": 3468,
                  "src": "99623:613:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3392,
                    "nodeType": "Block",
                    "src": "100328:197:0",
                    "statements": [
                      {
                        "assignments": [
                          3367
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3367,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3392,
                            "src": "100338:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3366,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "100338:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3379,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3377,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3363,
                              "src": "100405: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": 3372,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "100385:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_SafeERC20_$3468",
                                        "typeString": "library SafeERC20"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_SafeERC20_$3468",
                                        "typeString": "library SafeERC20"
                                      }
                                    ],
                                    "id": 3371,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "100377:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 3370,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "100377:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 3373,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "100377:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3374,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3361,
                                  "src": "100392:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3368,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3359,
                                  "src": "100361:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 3369,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "allowance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36,
                                "src": "100361:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address,address) view external returns (uint256)"
                                }
                              },
                              "id": 3375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "100361:39:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3376,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 212,
                            "src": "100361: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": 3378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "100361:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "100338:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3381,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3359,
                              "src": "100441:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3384,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3359,
                                      "src": "100471:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 3385,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46,
                                    "src": "100471:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 3386,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "100471:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3387,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3361,
                                  "src": "100495:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3388,
                                  "name": "newAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3367,
                                  "src": "100504: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": 3382,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "100448:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3383,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "100448:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 3389,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "100448: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": 3380,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3467,
                            "src": "100421:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 3390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "100421:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3391,
                        "nodeType": "ExpressionStatement",
                        "src": "100421:97:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 3393,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeIncreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3364,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3359,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3393,
                        "src": "100273:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3358,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "100273:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3361,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3393,
                        "src": "100287:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3360,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "100287:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3363,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3393,
                        "src": "100304:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3362,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "100304:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "100272:46:0"
                  },
                  "returnParameters": {
                    "id": 3365,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "100328:0:0"
                  },
                  "scope": 3468,
                  "src": "100242:283:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3429,
                    "nodeType": "Block",
                    "src": "100617:242:0",
                    "statements": [
                      {
                        "assignments": [
                          3403
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3403,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3429,
                            "src": "100627:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3402,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "100627:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3416,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3413,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3399,
                              "src": "100694:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                              "id": 3414,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "100701: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": 3408,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "100674:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_SafeERC20_$3468",
                                        "typeString": "library SafeERC20"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_SafeERC20_$3468",
                                        "typeString": "library SafeERC20"
                                      }
                                    ],
                                    "id": 3407,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "100666:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 3406,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "100666:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 3409,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "100666:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3410,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3397,
                                  "src": "100681:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3404,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3395,
                                  "src": "100650:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 3405,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "allowance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36,
                                "src": "100650:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address,address) view external returns (uint256)"
                                }
                              },
                              "id": 3411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "100650:39:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3412,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 257,
                            "src": "100650: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": 3415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "100650:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "100627:118:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3418,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3395,
                              "src": "100775:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3421,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3395,
                                      "src": "100805:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 3422,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46,
                                    "src": "100805:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 3423,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "100805:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3424,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3397,
                                  "src": "100829:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 3425,
                                  "name": "newAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3403,
                                  "src": "100838: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": 3419,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "100782:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3420,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "100782:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 3426,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "100782: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": 3417,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3467,
                            "src": "100755:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 3427,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "100755:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3428,
                        "nodeType": "ExpressionStatement",
                        "src": "100755:97:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 3430,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeDecreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3400,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3395,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3430,
                        "src": "100562:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3394,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "100562:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3397,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3430,
                        "src": "100576:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3396,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "100576:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3399,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3430,
                        "src": "100593:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3398,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "100593:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "100561:46:0"
                  },
                  "returnParameters": {
                    "id": 3401,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "100617:0:0"
                  },
                  "scope": 3468,
                  "src": "100531:328:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3466,
                    "nodeType": "Block",
                    "src": "101312:681:0",
                    "statements": [
                      {
                        "assignments": [
                          3439
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3439,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3466,
                            "src": "101661:23:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3438,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "101661:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3448,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3445,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3435,
                              "src": "101715:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 3446,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "101721: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": 3442,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3433,
                                  "src": "101695:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 3441,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "101687:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 3440,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "101687:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3443,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "101687:14:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 3444,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "functionCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3107,
                            "src": "101687: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": 3447,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "101687:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "101661:95:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3449,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3439,
                              "src": "101770:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3450,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "101770:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3451,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "101790:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "101770:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 3465,
                        "nodeType": "IfStatement",
                        "src": "101766:221:0",
                        "trueBody": {
                          "id": 3464,
                          "nodeType": "Block",
                          "src": "101793:194:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 3456,
                                        "name": "returndata",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3439,
                                        "src": "101910:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "id": 3458,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "101923:4:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_bool_$",
                                              "typeString": "type(bool)"
                                            },
                                            "typeName": {
                                              "id": 3457,
                                              "name": "bool",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "101923:4:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": null,
                                                "typeString": null
                                              }
                                            }
                                          }
                                        ],
                                        "id": 3459,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "101922: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": 3454,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "101899:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 3455,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "101899:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 3460,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "101899:30:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564",
                                    "id": 3461,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "101931: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": 3453,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "101891:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 3462,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "101891:85:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3463,
                              "nodeType": "ExpressionStatement",
                              "src": "101891:85:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3431,
                    "nodeType": "StructuredDocumentation",
                    "src": "100865: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": 3467,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_callOptionalReturn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3436,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3433,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3467,
                        "src": "101271:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3432,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "101271:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3435,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3467,
                        "src": "101285:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3434,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "101285:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101270:33:0"
                  },
                  "returnParameters": {
                    "id": 3437,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101312:0:0"
                  },
                  "scope": 3468,
                  "src": "101242:751:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 5010,
              "src": "98891:3104:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3470,
                    "name": "IStakeLockerFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3018,
                    "src": "102535:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IStakeLockerFDT_$3018",
                      "typeString": "contract IStakeLockerFDT"
                    }
                  },
                  "id": 3471,
                  "nodeType": "InheritanceSpecifier",
                  "src": "102535:15:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3472,
                    "name": "ExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1880,
                    "src": "102552:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ExtendedFDT_$1880",
                      "typeString": "contract ExtendedFDT"
                    }
                  },
                  "id": 3473,
                  "nodeType": "InheritanceSpecifier",
                  "src": "102552:11:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                577,
                1075,
                1447,
                1507,
                1880,
                3018
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 3469,
                "nodeType": "StructuredDocumentation",
                "src": "102409:90:0",
                "text": "@title StakeLockerFDT inherits ExtendedFDT and accounts for gains/losses for Stakers."
              },
              "fullyImplemented": true,
              "id": 3595,
              "linearizedBaseContracts": [
                3595,
                1880,
                1447,
                1075,
                3018,
                1507,
                141,
                77,
                577
              ],
              "name": "StakeLockerFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 3476,
                  "libraryName": {
                    "contractScope": null,
                    "id": 3474,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 379,
                    "src": "102577:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$379",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "102571:33:0",
                  "typeName": {
                    "id": 3475,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "102596:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 3479,
                  "libraryName": {
                    "contractScope": null,
                    "id": 3477,
                    "name": "SignedSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 556,
                    "src": "102615:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignedSafeMath_$556",
                      "typeString": "library SignedSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "102609:33:0",
                  "typeName": {
                    "id": 3478,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "102635:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "baseFunctions": [
                    2999
                  ],
                  "constant": false,
                  "functionSelector": "63f04b15",
                  "id": 3482,
                  "mutability": "immutable",
                  "name": "fundsToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3481,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "102662:8:0"
                  },
                  "scope": 3595,
                  "src": "102648:43:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$77",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3480,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "102648:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3005
                  ],
                  "constant": false,
                  "functionSelector": "aedc78c3",
                  "id": 3485,
                  "mutability": "mutable",
                  "name": "bptLosses",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3484,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "102713:8:0"
                  },
                  "scope": 3595,
                  "src": "102698:33:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3483,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "102698:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3011
                  ],
                  "constant": false,
                  "functionSelector": "fec984e3",
                  "id": 3488,
                  "mutability": "mutable",
                  "name": "lossesBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3487,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "102752:8:0"
                  },
                  "scope": 3595,
                  "src": "102737:37:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3486,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "102737:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3017
                  ],
                  "constant": false,
                  "functionSelector": "a9691f3f",
                  "id": 3491,
                  "mutability": "mutable",
                  "name": "fundsTokenBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3490,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "102795:8:0"
                  },
                  "scope": 3595,
                  "src": "102780:41:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3489,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "102780:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3510,
                    "nodeType": "Block",
                    "src": "102936:49:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3504,
                            "name": "fundsToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3482,
                            "src": "102946:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$77",
                              "typeString": "contract IERC20"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3506,
                                "name": "_fundsToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3497,
                                "src": "102966:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3505,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 77,
                              "src": "102959:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 3507,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "102959:19:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$77",
                              "typeString": "contract IERC20"
                            }
                          },
                          "src": "102946:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "id": 3509,
                        "nodeType": "ExpressionStatement",
                        "src": "102946:32:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 3511,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3500,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3493,
                          "src": "102915:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3501,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3495,
                          "src": "102921:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 3502,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 3499,
                        "name": "ExtendedFDT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1880,
                        "src": "102903:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ExtendedFDT_$1880_$",
                          "typeString": "type(contract ExtendedFDT)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "102903:25:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3498,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3493,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3511,
                        "src": "102840:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3492,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "102840:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3495,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3511,
                        "src": "102860:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3494,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "102860:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3497,
                        "mutability": "mutable",
                        "name": "_fundsToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3511,
                        "src": "102882:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3496,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "102882:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102839:63:0"
                  },
                  "returnParameters": {
                    "id": 3503,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "102936:0:0"
                  },
                  "scope": 3595,
                  "src": "102828:157:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1872
                  ],
                  "body": {
                    "id": 3533,
                    "nodeType": "Block",
                    "src": "103231:127:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3518,
                            "name": "losses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3516,
                            "src": "103241:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3519,
                              "name": "_prepareLossesWithdraw",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1631,
                              "src": "103250:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                "typeString": "function () returns (uint256)"
                              }
                            },
                            "id": 3520,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "103250:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "103241:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3522,
                        "nodeType": "ExpressionStatement",
                        "src": "103241:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3523,
                            "name": "bptLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3485,
                            "src": "103285:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3526,
                                "name": "losses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3516,
                                "src": "103311:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 3524,
                                "name": "bptLosses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3485,
                                "src": "103297:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3525,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 229,
                              "src": "103297:13: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": 3527,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "103297:21:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "103285:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3529,
                        "nodeType": "ExpressionStatement",
                        "src": "103285:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 3530,
                            "name": "_updateLossesBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3561
                            ],
                            "referencedDeclaration": 3561,
                            "src": "103329:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 3531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "103329:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 3532,
                        "nodeType": "ExpressionStatement",
                        "src": "103329:22:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3512,
                    "nodeType": "StructuredDocumentation",
                    "src": "102991:164:0",
                    "text": "@dev    Updates loss accounting for `msg.sender`, recognizing losses.\n@return losses The amount to be subtracted from a withdraw amount."
                  },
                  "id": 3534,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_recognizeLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3514,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "103197:8:0"
                  },
                  "parameters": {
                    "id": 3513,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "103185:2:0"
                  },
                  "returnParameters": {
                    "id": 3517,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3516,
                        "mutability": "mutable",
                        "name": "losses",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3534,
                        "src": "103215:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3515,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "103215:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103214:16:0"
                  },
                  "scope": 3595,
                  "src": "103160:198:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1879
                  ],
                  "body": {
                    "id": 3560,
                    "nodeType": "Block",
                    "src": "103636:176:0",
                    "statements": [
                      {
                        "assignments": [
                          3542
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3542,
                            "mutability": "mutable",
                            "name": "_prevLossesTokenBalance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3560,
                            "src": "103646:31:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3541,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "103646:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3544,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 3543,
                          "name": "lossesBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3488,
                          "src": "103680:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "103646:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3545,
                            "name": "lossesBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3488,
                            "src": "103704:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3546,
                            "name": "bptLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3485,
                            "src": "103720:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "103704:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3548,
                        "nodeType": "ExpressionStatement",
                        "src": "103704:25:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3556,
                                  "name": "_prevLossesTokenBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3542,
                                  "src": "103780:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3555,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "103773:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3554,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "103773:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "103773:31:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3551,
                                  "name": "lossesBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3488,
                                  "src": "103754:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3550,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "103747:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3549,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "103747:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3552,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "103747:21:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 3553,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 515,
                            "src": "103747: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": 3558,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "103747:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 3540,
                        "id": 3559,
                        "nodeType": "Return",
                        "src": "103740:65:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3535,
                    "nodeType": "StructuredDocumentation",
                    "src": "103364:200:0",
                    "text": "@dev    Updates the current losses balance and returns the difference of the new and previous losses balance.\n@return The difference of the new and previous losses balance."
                  },
                  "id": 3561,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateLossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3537,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "103610:8:0"
                  },
                  "parameters": {
                    "id": 3536,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "103598:2:0"
                  },
                  "returnParameters": {
                    "id": 3540,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3539,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3561,
                        "src": "103628:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3538,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "103628:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103627:8:0"
                  },
                  "scope": 3595,
                  "src": "103569:243:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1425
                  ],
                  "body": {
                    "id": 3593,
                    "nodeType": "Block",
                    "src": "104108:212:0",
                    "statements": [
                      {
                        "assignments": [
                          3569
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3569,
                            "mutability": "mutable",
                            "name": "_prevFundsTokenBalance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3593,
                            "src": "104118:30:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3568,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "104118:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3571,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 3570,
                          "name": "fundsTokenBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3491,
                          "src": "104151:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "104118:50:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3572,
                            "name": "fundsTokenBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3491,
                            "src": "104179:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3577,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "104228:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_StakeLockerFDT_$3595",
                                      "typeString": "contract StakeLockerFDT"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_StakeLockerFDT_$3595",
                                      "typeString": "contract StakeLockerFDT"
                                    }
                                  ],
                                  "id": 3576,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "104220:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3575,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "104220:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 3578,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "104220:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 3573,
                                "name": "fundsToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3482,
                                "src": "104199:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$77",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 3574,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16,
                              "src": "104199:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 3579,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "104199:35:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "104179:55:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3581,
                        "nodeType": "ExpressionStatement",
                        "src": "104179:55:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3589,
                                  "name": "_prevFundsTokenBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3569,
                                  "src": "104289:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3588,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "104282:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3587,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "104282:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3590,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "104282:30:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3584,
                                  "name": "fundsTokenBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3491,
                                  "src": "104259:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3583,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "104252:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3582,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "104252:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3585,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "104252:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 3586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 515,
                            "src": "104252: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": 3591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "104252:61:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 3567,
                        "id": 3592,
                        "nodeType": "Return",
                        "src": "104245:68:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3562,
                    "nodeType": "StructuredDocumentation",
                    "src": "103818:206:0",
                    "text": "@dev    Updates the current interest balance and returns the difference of the new and previous interest balance.\n@return The difference of the new and previous interest balance."
                  },
                  "id": 3594,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateFundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3564,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "104082:8:0"
                  },
                  "parameters": {
                    "id": 3563,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "104062:2:0"
                  },
                  "returnParameters": {
                    "id": 3567,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3566,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3594,
                        "src": "104100:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3565,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "104100:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "104099:8:0"
                  },
                  "scope": 3595,
                  "src": "104029:291:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 5010,
              "src": "102499:1824:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3597,
                    "name": "IStakeLockerFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3018,
                    "src": "104728:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IStakeLockerFDT_$3018",
                      "typeString": "contract IStakeLockerFDT"
                    }
                  },
                  "id": 3598,
                  "nodeType": "InheritanceSpecifier",
                  "src": "104728:15:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1507,
                3018
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 3596,
                "nodeType": "StructuredDocumentation",
                "src": "104594:108:0",
                "text": "@title StakeLocker holds custody of stakeAsset tokens for a given Pool and earns revenue from interest."
              },
              "fullyImplemented": false,
              "id": 3850,
              "linearizedBaseContracts": [
                3850,
                3018,
                1507,
                141,
                77
              ],
              "name": "IStakeLocker",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3599,
                    "nodeType": "StructuredDocumentation",
                    "src": "104751:101:0",
                    "text": "@dev   Emits an event indicating that the Stake Locker is now open to the public."
                  },
                  "id": 3601,
                  "name": "StakeLockerOpened",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3600,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "104880:2:0"
                  },
                  "src": "104857:26:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3602,
                    "nodeType": "StructuredDocumentation",
                    "src": "104889: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": 3610,
                  "name": "BalanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3609,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3604,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3610,
                        "src": "105185:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3603,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105185:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3606,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3610,
                        "src": "105209:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3605,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105209:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3608,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3610,
                        "src": "105232:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3607,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "105232:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "105184:64:0"
                  },
                  "src": "105164:85:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3611,
                    "nodeType": "StructuredDocumentation",
                    "src": "105255: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": 3617,
                  "name": "AllowListUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3616,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3613,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3617,
                        "src": "105568:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3612,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105568:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3615,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3617,
                        "src": "105592:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3614,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "105592:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "105567:37:0"
                  },
                  "src": "105545:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3618,
                    "nodeType": "StructuredDocumentation",
                    "src": "105611: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": 3624,
                  "name": "StakeDateUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3623,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3620,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3624,
                        "src": "105848:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3619,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105848:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3622,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3624,
                        "src": "105872:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3621,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "105872:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "105847:43:0"
                  },
                  "src": "105825:66:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3625,
                    "nodeType": "StructuredDocumentation",
                    "src": "105897:151:0",
                    "text": "@dev   Emits an event indicating that the stake lockup period has changed.\n@param lockupPeriod The new stake lockup period."
                  },
                  "id": 3629,
                  "name": "LockupPeriodUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3628,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3627,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "lockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3629,
                        "src": "106079:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3626,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "106079:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "106078:22:0"
                  },
                  "src": "106053:48:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3630,
                    "nodeType": "StructuredDocumentation",
                    "src": "106107: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": 3636,
                  "name": "Cooldown",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3635,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3632,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3636,
                        "src": "106347:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3631,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "106347:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3634,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "cooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3636,
                        "src": "106371:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3633,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "106371:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "106346:42:0"
                  },
                  "src": "106332:57:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3637,
                    "nodeType": "StructuredDocumentation",
                    "src": "106395: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": 3643,
                  "name": "Stake",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3642,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3639,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3643,
                        "src": "106622:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3638,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "106622:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3641,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3643,
                        "src": "106646:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3640,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "106646:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "106621:40:0"
                  },
                  "src": "106610:52:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3644,
                    "nodeType": "StructuredDocumentation",
                    "src": "106668: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": 3650,
                  "name": "Unstake",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3649,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3646,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "106892:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3645,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "106892:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3648,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "106916:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3647,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "106916:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "106891:40:0"
                  },
                  "src": "106878:54:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3651,
                    "nodeType": "StructuredDocumentation",
                    "src": "106938: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": 3661,
                  "name": "CustodyTransfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3660,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3653,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3661,
                        "src": "107396:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3652,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "107396:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3655,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3661,
                        "src": "107423:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3654,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "107423:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3657,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3661,
                        "src": "107445:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3656,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "107445:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3659,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3661,
                        "src": "107465:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3658,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "107465:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "107395:85:0"
                  },
                  "src": "107374:107:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3662,
                    "nodeType": "StructuredDocumentation",
                    "src": "107487: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": 3672,
                  "name": "CustodyAllowanceChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3671,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3664,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "107989:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3663,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "107989:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3666,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "108013:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3665,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "108013:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3668,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oldAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "108040:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3667,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "108040:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3670,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "108062:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3669,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "108062:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "107988:95:0"
                  },
                  "src": "107959:125:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3673,
                    "nodeType": "StructuredDocumentation",
                    "src": "108090: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": 3679,
                  "name": "TotalCustodyAllowanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3678,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3675,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3679,
                        "src": "108469:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3674,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "108469:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3677,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newTotalAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3679,
                        "src": "108493:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3676,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "108493:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "108468:51:0"
                  },
                  "src": "108434:86:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3680,
                    "nodeType": "StructuredDocumentation",
                    "src": "108526:108:0",
                    "text": "@dev The asset deposited by Stakers into this contract, for liquidation during defaults."
                  },
                  "functionSelector": "80cd916d",
                  "id": 3685,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3681,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "108658:2:0"
                  },
                  "returnParameters": {
                    "id": 3684,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3683,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3685,
                        "src": "108684:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3682,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "108684:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "108683:8:0"
                  },
                  "scope": 3850,
                  "src": "108639:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3686,
                    "nodeType": "StructuredDocumentation",
                    "src": "108698:116:0",
                    "text": "@dev The Liquidity Asset for the Pool as well as the dividend token for StakeLockerFDT interest."
                  },
                  "functionSelector": "209b2bca",
                  "id": 3691,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3687,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "108842:2:0"
                  },
                  "returnParameters": {
                    "id": 3690,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3689,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3691,
                        "src": "108868:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3688,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "108868:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "108867:9:0"
                  },
                  "scope": 3850,
                  "src": "108819:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3692,
                    "nodeType": "StructuredDocumentation",
                    "src": "108883:41:0",
                    "text": "@dev The parent Pool."
                  },
                  "functionSelector": "16f0115b",
                  "id": 3697,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3693,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "108942:2:0"
                  },
                  "returnParameters": {
                    "id": 3696,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3695,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3697,
                        "src": "108968:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3694,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "108968:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "108967:9:0"
                  },
                  "scope": 3850,
                  "src": "108929:48:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3698,
                    "nodeType": "StructuredDocumentation",
                    "src": "108983:82:0",
                    "text": "@dev The number of seconds for which unstaking is not allowed."
                  },
                  "functionSelector": "ee947a7c",
                  "id": 3703,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3699,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "109091:2:0"
                  },
                  "returnParameters": {
                    "id": 3702,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3701,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3703,
                        "src": "109117:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3700,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "109117:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109116:9:0"
                  },
                  "scope": 3850,
                  "src": "109070:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3704,
                    "nodeType": "StructuredDocumentation",
                    "src": "109132:115:0",
                    "text": "@param  account The address of a Staker.\n@return The effective stake date of `account`."
                  },
                  "functionSelector": "5190bbaf",
                  "id": 3711,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeDate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3707,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3706,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3711,
                        "src": "109271:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3705,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "109271:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109270:17:0"
                  },
                  "returnParameters": {
                    "id": 3710,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3709,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3711,
                        "src": "109306:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3708,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "109306:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109305:9:0"
                  },
                  "scope": 3850,
                  "src": "109252:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3712,
                    "nodeType": "StructuredDocumentation",
                    "src": "109321:129:0",
                    "text": "@param  account The address of a Staker.\n@return The timestamp of when `account` called `cooldown()`."
                  },
                  "functionSelector": "ff887130",
                  "id": 3719,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unstakeCooldown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3715,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3714,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3719,
                        "src": "109480:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3713,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "109480:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109479:17:0"
                  },
                  "returnParameters": {
                    "id": 3718,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3717,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3719,
                        "src": "109520:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3716,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "109520:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109519:9:0"
                  },
                  "scope": 3850,
                  "src": "109455:74:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3720,
                    "nodeType": "StructuredDocumentation",
                    "src": "109535:106:0",
                    "text": "@param  account The address of a Staker.\n@return Whether `account` is allowed."
                  },
                  "functionSelector": "d63a8e11",
                  "id": 3727,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3723,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3722,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3727,
                        "src": "109663:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3721,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "109663:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109662:17:0"
                  },
                  "returnParameters": {
                    "id": 3726,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3725,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3727,
                        "src": "109703:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3724,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "109703:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109702:6:0"
                  },
                  "scope": 3850,
                  "src": "109646:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3728,
                    "nodeType": "StructuredDocumentation",
                    "src": "109715: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": 3737,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "custodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3733,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3730,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3737,
                        "src": "109957:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3729,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "109957:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3732,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3737,
                        "src": "109974:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3731,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "109974:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109956:36:0"
                  },
                  "returnParameters": {
                    "id": 3736,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3735,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3737,
                        "src": "110016:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3734,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "110016:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "110015:9:0"
                  },
                  "scope": 3850,
                  "src": "109931:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3738,
                    "nodeType": "StructuredDocumentation",
                    "src": "110031: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": 3745,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3740,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3745,
                        "src": "110254:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3739,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "110254:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "110253:17:0"
                  },
                  "returnParameters": {
                    "id": 3744,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3743,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3745,
                        "src": "110294:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3742,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "110294:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "110293:9:0"
                  },
                  "scope": 3850,
                  "src": "110223:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "1831ccf2",
                  "id": 3750,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3746,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110330:2:0"
                  },
                  "returnParameters": {
                    "id": 3749,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3748,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3750,
                        "src": "110356:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3747,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "110356:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "110355:6:0"
                  },
                  "scope": 3850,
                  "src": "110309:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3751,
                    "nodeType": "StructuredDocumentation",
                    "src": "110368: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": 3758,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setAllowlist",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3756,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3753,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3758,
                        "src": "110707:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3752,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "110707:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3755,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3758,
                        "src": "110723:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3754,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "110723:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "110706:29:0"
                  },
                  "returnParameters": {
                    "id": 3757,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110744:0:0"
                  },
                  "scope": 3850,
                  "src": "110685:60:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3759,
                    "nodeType": "StructuredDocumentation",
                    "src": "110751: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": 3762,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openStakeLockerToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3760,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110970:2:0"
                  },
                  "returnParameters": {
                    "id": 3761,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110981:0:0"
                  },
                  "scope": 3850,
                  "src": "110938:44:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3763,
                    "nodeType": "StructuredDocumentation",
                    "src": "110988: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": 3768,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3766,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3765,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3768,
                        "src": "111265:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3764,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "111265:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "111264:25:0"
                  },
                  "returnParameters": {
                    "id": 3767,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "111298:0:0"
                  },
                  "scope": 3850,
                  "src": "111240:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3769,
                    "nodeType": "StructuredDocumentation",
                    "src": "111305: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": 3776,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pull",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3774,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3771,
                        "mutability": "mutable",
                        "name": "dst",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3776,
                        "src": "111587:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3770,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "111587:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3773,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3776,
                        "src": "111600:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3772,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "111600:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "111586:26:0"
                  },
                  "returnParameters": {
                    "id": 3775,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "111621:0:0"
                  },
                  "scope": 3850,
                  "src": "111573:49:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3777,
                    "nodeType": "StructuredDocumentation",
                    "src": "111628: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": 3782,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3780,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3779,
                        "mutability": "mutable",
                        "name": "bptsBurned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3782,
                        "src": "111877:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3778,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "111877:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "111876:20:0"
                  },
                  "returnParameters": {
                    "id": 3781,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "111905:0:0"
                  },
                  "scope": 3850,
                  "src": "111855:51:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3783,
                    "nodeType": "StructuredDocumentation",
                    "src": "111912: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": 3788,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3786,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3785,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3788,
                        "src": "112303:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3784,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "112303:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "112302:13:0"
                  },
                  "returnParameters": {
                    "id": 3787,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "112324:0:0"
                  },
                  "scope": 3850,
                  "src": "112288:37:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3789,
                    "nodeType": "StructuredDocumentation",
                    "src": "112331: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": 3792,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "intendToUnstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3790,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "112534:2:0"
                  },
                  "returnParameters": {
                    "id": 3791,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "112545:0:0"
                  },
                  "scope": 3850,
                  "src": "112510:36:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3793,
                    "nodeType": "StructuredDocumentation",
                    "src": "112552: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": 3796,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelUnstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3794,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "112729:2:0"
                  },
                  "returnParameters": {
                    "id": 3795,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "112740:0:0"
                  },
                  "scope": 3850,
                  "src": "112707:34:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3797,
                    "nodeType": "StructuredDocumentation",
                    "src": "112747: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": 3802,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3800,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3799,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3802,
                        "src": "113126:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3798,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113126:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "113125:13:0"
                  },
                  "returnParameters": {
                    "id": 3801,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "113147:0:0"
                  },
                  "scope": 3850,
                  "src": "113109:39:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": null,
                  "documentation": {
                    "id": 3803,
                    "nodeType": "StructuredDocumentation",
                    "src": "113154: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": 3807,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3805,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "113376:8:0"
                  },
                  "parameters": {
                    "id": 3804,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "113364:2:0"
                  },
                  "returnParameters": {
                    "id": 3806,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "113384:0:0"
                  },
                  "scope": 3850,
                  "src": "113342:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3808,
                    "nodeType": "StructuredDocumentation",
                    "src": "113395: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": 3815,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3813,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3810,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3815,
                        "src": "113870:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3809,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "113870:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3812,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3815,
                        "src": "113889:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3811,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113889:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "113869:35:0"
                  },
                  "returnParameters": {
                    "id": 3814,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "113913:0:0"
                  },
                  "scope": 3850,
                  "src": "113836:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3816,
                    "nodeType": "StructuredDocumentation",
                    "src": "113920: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": 3825,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3823,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3818,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3825,
                        "src": "114646:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3817,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "114646:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3820,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3825,
                        "src": "114660:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3819,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "114660:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3822,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3825,
                        "src": "114672:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3821,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "114672:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "114645:42:0"
                  },
                  "returnParameters": {
                    "id": 3824,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "114696:0:0"
                  },
                  "scope": 3850,
                  "src": "114617:80:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3826,
                    "nodeType": "StructuredDocumentation",
                    "src": "114703: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": 3829,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3827,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "114904:2:0"
                  },
                  "returnParameters": {
                    "id": 3828,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "114915:0:0"
                  },
                  "scope": 3850,
                  "src": "114890:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3830,
                    "nodeType": "StructuredDocumentation",
                    "src": "114922: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": 3833,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3831,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "115129:2:0"
                  },
                  "returnParameters": {
                    "id": 3832,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "115140:0:0"
                  },
                  "scope": 3850,
                  "src": "115113:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3834,
                    "nodeType": "StructuredDocumentation",
                    "src": "115147: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": 3841,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isUnstakeAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3837,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3836,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3841,
                        "src": "115308:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3835,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "115308:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "115307:14:0"
                  },
                  "returnParameters": {
                    "id": 3840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3839,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3841,
                        "src": "115345:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3838,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "115345:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "115344:6:0"
                  },
                  "scope": 3850,
                  "src": "115282:69:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3842,
                    "nodeType": "StructuredDocumentation",
                    "src": "115357: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": 3849,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isReceiveAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3845,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3844,
                        "mutability": "mutable",
                        "name": "_unstakeCooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3849,
                        "src": "115571:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3843,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "115571:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "115570:26:0"
                  },
                  "returnParameters": {
                    "id": 3848,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3847,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3849,
                        "src": "115620:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3846,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "115620:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "115619:6:0"
                  },
                  "scope": 3850,
                  "src": "115545:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5010,
              "src": "104702:10927:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3852,
                    "name": "Context",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 577,
                    "src": "116239:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Context_$577",
                      "typeString": "contract Context"
                    }
                  },
                  "id": 3853,
                  "nodeType": "InheritanceSpecifier",
                  "src": "116239:7:0"
                }
              ],
              "contractDependencies": [
                577
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 3851,
                "nodeType": "StructuredDocumentation",
                "src": "115769: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": 3937,
              "linearizedBaseContracts": [
                3937,
                577
              ],
              "name": "Pausable",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3854,
                    "nodeType": "StructuredDocumentation",
                    "src": "116253:73:0",
                    "text": " @dev Emitted when the pause is triggered by `account`."
                  },
                  "id": 3858,
                  "name": "Paused",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3857,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3856,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3858,
                        "src": "116344:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3855,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116344:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116343:17:0"
                  },
                  "src": "116331:30:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3859,
                    "nodeType": "StructuredDocumentation",
                    "src": "116367:70:0",
                    "text": " @dev Emitted when the pause is lifted by `account`."
                  },
                  "id": 3863,
                  "name": "Unpaused",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3862,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3861,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3863,
                        "src": "116457:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3860,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116457:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116456:17:0"
                  },
                  "src": "116442:32:0"
                },
                {
                  "constant": false,
                  "id": 3865,
                  "mutability": "mutable",
                  "name": "_paused",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3937,
                  "src": "116480:20:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3864,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "116480:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3873,
                    "nodeType": "Block",
                    "src": "116603:32:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3869,
                            "name": "_paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3865,
                            "src": "116613:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 3870,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "116623:5:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "116613:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3872,
                        "nodeType": "ExpressionStatement",
                        "src": "116613:15:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3866,
                    "nodeType": "StructuredDocumentation",
                    "src": "116507:67:0",
                    "text": " @dev Initializes the contract in unpaused state."
                  },
                  "id": 3874,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3867,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116591:2:0"
                  },
                  "returnParameters": {
                    "id": 3868,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116603:0:0"
                  },
                  "scope": 3937,
                  "src": "116579:56:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3882,
                    "nodeType": "Block",
                    "src": "116775:31:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3880,
                          "name": "_paused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3865,
                          "src": "116792:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 3879,
                        "id": 3881,
                        "nodeType": "Return",
                        "src": "116785:14:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3875,
                    "nodeType": "StructuredDocumentation",
                    "src": "116641:84:0",
                    "text": " @dev Returns true if the contract is paused, and false otherwise."
                  },
                  "functionSelector": "5c975abb",
                  "id": 3883,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "paused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3876,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116745:2:0"
                  },
                  "returnParameters": {
                    "id": 3879,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3878,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3883,
                        "src": "116769:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3877,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "116769:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116768:6:0"
                  },
                  "scope": 3937,
                  "src": "116730:76:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3893,
                    "nodeType": "Block",
                    "src": "117017:65:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3888,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "117035:8:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "id": 3887,
                                "name": "_paused",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3865,
                                "src": "117036:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5061757361626c653a20706175736564",
                              "id": 3889,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "117045: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": 3886,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "117027:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "117027:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3891,
                        "nodeType": "ExpressionStatement",
                        "src": "117027:37:0"
                      },
                      {
                        "id": 3892,
                        "nodeType": "PlaceholderStatement",
                        "src": "117074:1:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3884,
                    "nodeType": "StructuredDocumentation",
                    "src": "116812: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": 3894,
                  "name": "whenNotPaused",
                  "nodeType": "ModifierDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3885,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "117014:2:0"
                  },
                  "src": "116992:90:0",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3903,
                    "nodeType": "Block",
                    "src": "117282:68:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3898,
                              "name": "_paused",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3865,
                              "src": "117300:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5061757361626c653a206e6f7420706175736564",
                              "id": 3899,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "117309: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": 3897,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "117292:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3900,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "117292:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3901,
                        "nodeType": "ExpressionStatement",
                        "src": "117292:40:0"
                      },
                      {
                        "id": 3902,
                        "nodeType": "PlaceholderStatement",
                        "src": "117342:1:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3895,
                    "nodeType": "StructuredDocumentation",
                    "src": "117088: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": 3904,
                  "name": "whenPaused",
                  "nodeType": "ModifierDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3896,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "117279:2:0"
                  },
                  "src": "117260:90:0",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3919,
                    "nodeType": "Block",
                    "src": "117534:66:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3910,
                            "name": "_paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3865,
                            "src": "117544:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 3911,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "117554:4:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "117544:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3913,
                        "nodeType": "ExpressionStatement",
                        "src": "117544:14:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 3915,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 565,
                                "src": "117580:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 3916,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "117580:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 3914,
                            "name": "Paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3858,
                            "src": "117573:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 3917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "117573:20:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3918,
                        "nodeType": "EmitStatement",
                        "src": "117568:25:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3905,
                    "nodeType": "StructuredDocumentation",
                    "src": "117356:124:0",
                    "text": " @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused."
                  },
                  "id": 3920,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": null,
                      "id": 3908,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 3907,
                        "name": "whenNotPaused",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3894,
                        "src": "117520:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "117520:13:0"
                    }
                  ],
                  "name": "_pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3906,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "117500:2:0"
                  },
                  "returnParameters": {
                    "id": 3909,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "117534:0:0"
                  },
                  "scope": 3937,
                  "src": "117485:115:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3935,
                    "nodeType": "Block",
                    "src": "117780:69:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3928,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3926,
                            "name": "_paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3865,
                            "src": "117790:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 3927,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "117800:5:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "117790:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3929,
                        "nodeType": "ExpressionStatement",
                        "src": "117790:15:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 3931,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 565,
                                "src": "117829:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 3932,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "117829:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 3930,
                            "name": "Unpaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3863,
                            "src": "117820:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 3933,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "117820:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3934,
                        "nodeType": "EmitStatement",
                        "src": "117815:27:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3921,
                    "nodeType": "StructuredDocumentation",
                    "src": "117606:121:0",
                    "text": " @dev Returns to normal state.\n Requirements:\n - The contract must be paused."
                  },
                  "id": 3936,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": null,
                      "id": 3924,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 3923,
                        "name": "whenPaused",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3904,
                        "src": "117769:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "117769:10:0"
                    }
                  ],
                  "name": "_unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3922,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "117749:2:0"
                  },
                  "returnParameters": {
                    "id": 3925,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "117780:0:0"
                  },
                  "scope": 3937,
                  "src": "117732:117:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 5010,
              "src": "116209:1642:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3939,
                    "name": "IStakeLocker",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3850,
                    "src": "118967:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IStakeLocker_$3850",
                      "typeString": "contract IStakeLocker"
                    }
                  },
                  "id": 3940,
                  "nodeType": "InheritanceSpecifier",
                  "src": "118967:12:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3941,
                    "name": "StakeLockerFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3595,
                    "src": "118981:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StakeLockerFDT_$3595",
                      "typeString": "contract StakeLockerFDT"
                    }
                  },
                  "id": 3942,
                  "nodeType": "InheritanceSpecifier",
                  "src": "118981:14:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3943,
                    "name": "Pausable",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3937,
                    "src": "118997:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Pausable_$3937",
                      "typeString": "contract Pausable"
                    }
                  },
                  "id": 3944,
                  "nodeType": "InheritanceSpecifier",
                  "src": "118997:8:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                577,
                1075,
                1447,
                1507,
                1880,
                3018,
                3595,
                3850,
                3937
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 3938,
                "nodeType": "StructuredDocumentation",
                "src": "118835:108:0",
                "text": "@title StakeLocker holds custody of stakeAsset tokens for a given Pool and earns revenue from interest."
              },
              "fullyImplemented": true,
              "id": 5009,
              "linearizedBaseContracts": [
                5009,
                3937,
                3595,
                1880,
                1447,
                1075,
                3850,
                3018,
                1507,
                141,
                77,
                577
              ],
              "name": "StakeLocker",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 3947,
                  "libraryName": {
                    "contractScope": null,
                    "id": 3945,
                    "name": "SafeMathInt",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 162,
                    "src": "119019:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathInt_$162",
                      "typeString": "library SafeMathInt"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "119013:32:0",
                  "typeName": {
                    "id": 3946,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "119038:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "id": 3950,
                  "libraryName": {
                    "contractScope": null,
                    "id": 3948,
                    "name": "SignedSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 556,
                    "src": "119056:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignedSafeMath_$556",
                      "typeString": "library SignedSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "119050:32:0",
                  "typeName": {
                    "id": 3949,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "119075:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "id": 3953,
                  "libraryName": {
                    "contractScope": null,
                    "id": 3951,
                    "name": "SafeERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3468,
                    "src": "119093:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeERC20_$3468",
                      "typeString": "library SafeERC20"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "119087:32:0",
                  "typeName": {
                    "contractScope": null,
                    "id": 3952,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "119112:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "constant": true,
                  "id": 3958,
                  "mutability": "constant",
                  "name": "WAD",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5009,
                  "src": "119125:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3954,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "119125:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000"
                    },
                    "id": 3957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "3130",
                      "id": 3955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "119148: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": 3956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "119154:2:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_18_by_1",
                        "typeString": "int_const 18"
                      },
                      "value": "18"
                    },
                    "src": "119148:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3685
                  ],
                  "constant": false,
                  "functionSelector": "80cd916d",
                  "id": 3961,
                  "mutability": "immutable",
                  "name": "stakeAsset",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3960,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "119227:8:0"
                  },
                  "scope": 5009,
                  "src": "119212:44:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$77",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3959,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "119212:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3691
                  ],
                  "constant": false,
                  "functionSelector": "209b2bca",
                  "id": 3964,
                  "mutability": "immutable",
                  "name": "liquidityAsset",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3963,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "119278:8:0"
                  },
                  "scope": 5009,
                  "src": "119263:48:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3962,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "119263:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3697
                  ],
                  "constant": false,
                  "functionSelector": "16f0115b",
                  "id": 3967,
                  "mutability": "immutable",
                  "name": "pool",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3966,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "119332:8:0"
                  },
                  "scope": 5009,
                  "src": "119317:38:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3965,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "119317:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3703
                  ],
                  "constant": false,
                  "functionSelector": "ee947a7c",
                  "id": 3970,
                  "mutability": "mutable",
                  "name": "lockupPeriod",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3969,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "119377:8:0"
                  },
                  "scope": 5009,
                  "src": "119362:36:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3968,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "119362:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3711
                  ],
                  "constant": false,
                  "functionSelector": "5190bbaf",
                  "id": 3975,
                  "mutability": "mutable",
                  "name": "stakeDate",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3974,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "119460:8:0"
                  },
                  "scope": 5009,
                  "src": "119405:73:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 3973,
                    "keyType": {
                      "id": 3971,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "119413:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "119405:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 3972,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "119424:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3719
                  ],
                  "constant": false,
                  "functionSelector": "ff887130",
                  "id": 3980,
                  "mutability": "mutable",
                  "name": "unstakeCooldown",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3979,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "119539:8:0"
                  },
                  "scope": 5009,
                  "src": "119484:79:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 3978,
                    "keyType": {
                      "id": 3976,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "119492:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "119484:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 3977,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "119503:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3727
                  ],
                  "constant": false,
                  "functionSelector": "d63a8e11",
                  "id": 3985,
                  "mutability": "mutable",
                  "name": "allowed",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3984,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "119624:8:0"
                  },
                  "scope": 5009,
                  "src": "119569:71:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 3983,
                    "keyType": {
                      "id": 3981,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "119577:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "119569:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 3982,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "119588:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3737
                  ],
                  "constant": false,
                  "functionSelector": "c965b548",
                  "id": 3992,
                  "mutability": "mutable",
                  "name": "custodyAllowance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3991,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "119701:8:0"
                  },
                  "scope": 5009,
                  "src": "119646: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": 3990,
                    "keyType": {
                      "id": 3986,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "119654:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "119646:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 3989,
                      "keyType": {
                        "id": 3987,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "119673:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "119665:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 3988,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "119684:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3745
                  ],
                  "constant": false,
                  "functionSelector": "af6d5571",
                  "id": 3997,
                  "mutability": "mutable",
                  "name": "totalCustodyAllowance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3996,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "119787:8:0"
                  },
                  "scope": 5009,
                  "src": "119732:85:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 3995,
                    "keyType": {
                      "id": 3993,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "119740:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "119732:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 3994,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "119751:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3750
                  ],
                  "constant": false,
                  "functionSelector": "1831ccf2",
                  "id": 4000,
                  "mutability": "mutable",
                  "name": "openToPublic",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3999,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "119836:8:0"
                  },
                  "scope": 5009,
                  "src": "119824:33:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3998,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "119824:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4032,
                    "nodeType": "Block",
                    "src": "120098:162:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4014,
                            "name": "liquidityAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3964,
                            "src": "120108:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4015,
                            "name": "_liquidityAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4004,
                            "src": "120125:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "120108:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4017,
                        "nodeType": "ExpressionStatement",
                        "src": "120108:32:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4018,
                            "name": "stakeAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3961,
                            "src": "120150:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$77",
                              "typeString": "contract IERC20"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4020,
                                "name": "_stakeAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4002,
                                "src": "120174:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4019,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 77,
                              "src": "120167:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 4021,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "120167:19:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$77",
                              "typeString": "contract IERC20"
                            }
                          },
                          "src": "120150:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "id": 4023,
                        "nodeType": "ExpressionStatement",
                        "src": "120150:36:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4024,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3967,
                            "src": "120196:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4025,
                            "name": "_pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4006,
                            "src": "120213:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "120196:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4027,
                        "nodeType": "ExpressionStatement",
                        "src": "120196:22:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4028,
                            "name": "lockupPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3970,
                            "src": "120228:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "313830",
                            "id": 4029,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "120245:8:0",
                            "subdenomination": "days",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_15552000_by_1",
                              "typeString": "int_const 15552000"
                            },
                            "value": "180"
                          },
                          "src": "120228:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4031,
                        "nodeType": "ExpressionStatement",
                        "src": "120228:25:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4033,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "4d61706c65205374616b654c6f636b6572",
                          "id": 4009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "120041:19:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_ab7afd53a2a04a29cc95aefe79e8e8702ee9b58ed79d3a9c53d2c8bb52e1e8df",
                            "typeString": "literal_string \"Maple StakeLocker\""
                          },
                          "value": "Maple StakeLocker"
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4d504c5354414b45",
                          "id": 4010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "120062:10:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_f34b507964ad69aeae1204db064d7f0d897dc7a7d6402b71adc16e696df242e7",
                            "typeString": "literal_string \"MPLSTAKE\""
                          },
                          "value": "MPLSTAKE"
                        },
                        {
                          "argumentTypes": null,
                          "id": 4011,
                          "name": "_liquidityAsset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4004,
                          "src": "120074:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 4012,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 4008,
                        "name": "StakeLockerFDT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3595,
                        "src": "120026:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_StakeLockerFDT_$3595_$",
                          "typeString": "type(contract StakeLockerFDT)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "120026:64:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4007,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4002,
                        "mutability": "mutable",
                        "name": "_stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4033,
                        "src": "119944:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4001,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "119944:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4004,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4033,
                        "src": "119973:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4003,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "119973:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4006,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4033,
                        "src": "120006:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4005,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "120006:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "119934:91:0"
                  },
                  "returnParameters": {
                    "id": 4013,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "120098:0:0"
                  },
                  "scope": 5009,
                  "src": "119923:337:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4059,
                    "nodeType": "Block",
                    "src": "120634:240:0",
                    "statements": [
                      {
                        "assignments": [
                          4039
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4039,
                            "mutability": "mutable",
                            "name": "_pool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4059,
                            "src": "120644:11:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IPool_$2866",
                              "typeString": "contract IPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4038,
                              "name": "IPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 2866,
                              "src": "120644:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPool_$2866",
                                "typeString": "contract IPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4043,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4041,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3967,
                              "src": "120664:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4040,
                            "name": "IPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2866,
                            "src": "120658:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IPool_$2866_$",
                              "typeString": "type(contract IPool)"
                            }
                          },
                          "id": 4042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "120658:11:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IPool_$2866",
                            "typeString": "contract IPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "120644:25:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4054,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4048,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "!",
                                "prefix": true,
                                "src": "120780:24:0",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4045,
                                      "name": "_pool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4039,
                                      "src": "120781:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IPool_$2866",
                                        "typeString": "contract IPool"
                                      }
                                    },
                                    "id": 4046,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "isPoolFinalized",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2865,
                                    "src": "120781:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                                      "typeString": "function () view external returns (bool)"
                                    }
                                  },
                                  "id": 4047,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "120781:23:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 4053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 4049,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4036,
                                  "src": "120808:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4050,
                                      "name": "_pool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4039,
                                      "src": "120816:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IPool_$2866",
                                        "typeString": "contract IPool"
                                      }
                                    },
                                    "id": 4051,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "poolDelegate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2552,
                                    "src": "120816:18:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                      "typeString": "function () pure external returns (address)"
                                    }
                                  },
                                  "id": 4052,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "120816:20:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "120808:28:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "120780:56:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a5354414b455f4c4f434b4544",
                              "id": 4055,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "120838:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f5782f43a9eb801ea56e95019ac05321bd9f6fc586482c85e3bcf91719a4f426",
                                "typeString": "literal_string \"SL:STAKE_LOCKED\""
                              },
                              "value": "SL:STAKE_LOCKED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f5782f43a9eb801ea56e95019ac05321bd9f6fc586482c85e3bcf91719a4f426",
                                "typeString": "literal_string \"SL:STAKE_LOCKED\""
                              }
                            ],
                            "id": 4044,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "120772:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4056,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "120772:84:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4057,
                        "nodeType": "ExpressionStatement",
                        "src": "120772:84:0"
                      },
                      {
                        "id": 4058,
                        "nodeType": "PlaceholderStatement",
                        "src": "120866:1:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4034,
                    "nodeType": "StructuredDocumentation",
                    "src": "120339:256:0",
                    "text": "@dev Checks that an account can unstake given the following conditions: \n1. The Account is not the Pool Delegate and the Pool is in Finalized state. \n2. The Pool is in Initialized or Deactivated state. "
                  },
                  "id": 4060,
                  "name": "canUnstake",
                  "nodeType": "ModifierDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4037,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4036,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4060,
                        "src": "120620:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4035,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "120620:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "120619:14:0"
                  },
                  "src": "120600:274:0",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4075,
                    "nodeType": "Block",
                    "src": "120973:86:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 4070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4064,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "120991:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4065,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "120991:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 4066,
                                      "name": "_globals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4994,
                                      "src": "121005:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IMapleGlobals_$2371_$",
                                        "typeString": "function () view returns (contract IMapleGlobals)"
                                      }
                                    },
                                    "id": 4067,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "121005:10:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  "id": 4068,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "governor",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1986,
                                  "src": "121005:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 4069,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "121005:21:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "120991:35:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a4e4f545f474f56",
                              "id": 4071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "121028:12:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_790f376d1a1c913935b9bb4d51cc729bd2108276167dacfd97c3d36db09d2387",
                                "typeString": "literal_string \"SL:NOT_GOV\""
                              },
                              "value": "SL:NOT_GOV"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_790f376d1a1c913935b9bb4d51cc729bd2108276167dacfd97c3d36db09d2387",
                                "typeString": "literal_string \"SL:NOT_GOV\""
                              }
                            ],
                            "id": 4063,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "120983:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4072,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "120983:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4073,
                        "nodeType": "ExpressionStatement",
                        "src": "120983:58:0"
                      },
                      {
                        "id": 4074,
                        "nodeType": "PlaceholderStatement",
                        "src": "121051:1:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4061,
                    "nodeType": "StructuredDocumentation",
                    "src": "120880:66:0",
                    "text": "@dev Checks that `msg.sender` is the Governor."
                  },
                  "id": 4076,
                  "name": "isGovernor",
                  "nodeType": "ModifierDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4062,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "120970:2:0"
                  },
                  "src": "120951:108:0",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4088,
                    "nodeType": "Block",
                    "src": "121150:67:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 4083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4080,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "121168:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4081,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "121168:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4082,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3967,
                                "src": "121182:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "121168:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a4e4f545f50",
                              "id": 4084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "121188:10:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2695df0eae236688abcc24707402df84d66b85716f3216fe7b3600f965f5746c",
                                "typeString": "literal_string \"SL:NOT_P\""
                              },
                              "value": "SL:NOT_P"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2695df0eae236688abcc24707402df84d66b85716f3216fe7b3600f965f5746c",
                                "typeString": "literal_string \"SL:NOT_P\""
                              }
                            ],
                            "id": 4079,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "121160:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121160:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4086,
                        "nodeType": "ExpressionStatement",
                        "src": "121160:39:0"
                      },
                      {
                        "id": 4087,
                        "nodeType": "PlaceholderStatement",
                        "src": "121209:1:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4077,
                    "nodeType": "StructuredDocumentation",
                    "src": "121065:62:0",
                    "text": "@dev Checks that `msg.sender` is the Pool."
                  },
                  "id": 4089,
                  "name": "isPool",
                  "nodeType": "ModifierDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4078,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "121147:2:0"
                  },
                  "src": "121132:85:0",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3758
                  ],
                  "body": {
                    "id": 4114,
                    "nodeType": "Block",
                    "src": "121378:154:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4097,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5008,
                            "src": "121388:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121388:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4099,
                        "nodeType": "ExpressionStatement",
                        "src": "121388:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4100,
                            "name": "_isValidPoolDelegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4951,
                            "src": "121422:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121422:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4102,
                        "nodeType": "ExpressionStatement",
                        "src": "121422:22:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4103,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3985,
                              "src": "121454:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4105,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4104,
                              "name": "staker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4091,
                              "src": "121462:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "121454:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4106,
                            "name": "status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4093,
                            "src": "121472:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "121454:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4108,
                        "nodeType": "ExpressionStatement",
                        "src": "121454:24:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4110,
                              "name": "staker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4091,
                              "src": "121510:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4111,
                              "name": "status",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4093,
                              "src": "121518:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 4109,
                            "name": "AllowListUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3617,
                            "src": "121493:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,bool)"
                            }
                          },
                          "id": 4112,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121493:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4113,
                        "nodeType": "EmitStatement",
                        "src": "121488:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "b12527f8",
                  "id": 4115,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setAllowlist",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4095,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "121369:8:0"
                  },
                  "parameters": {
                    "id": 4094,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4091,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4115,
                        "src": "121333:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4090,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "121333:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4093,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4115,
                        "src": "121349:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4092,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "121349:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "121332:29:0"
                  },
                  "returnParameters": {
                    "id": 4096,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "121378:0:0"
                  },
                  "scope": 5009,
                  "src": "121311:221:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3762
                  ],
                  "body": {
                    "id": 4132,
                    "nodeType": "Block",
                    "src": "121591:136:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4119,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5008,
                            "src": "121601:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121601:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4121,
                        "nodeType": "ExpressionStatement",
                        "src": "121601:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4122,
                            "name": "_isValidPoolDelegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4951,
                            "src": "121635:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121635:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4124,
                        "nodeType": "ExpressionStatement",
                        "src": "121635:22:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4127,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4125,
                            "name": "openToPublic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4000,
                            "src": "121667:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 4126,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "121682:4:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "121667:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4128,
                        "nodeType": "ExpressionStatement",
                        "src": "121667:19:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4129,
                            "name": "StakeLockerOpened",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3601,
                            "src": "121701:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 4130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121701:19:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4131,
                        "nodeType": "EmitStatement",
                        "src": "121696:24:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "0e754e86",
                  "id": 4133,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openStakeLockerToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4117,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "121582:8:0"
                  },
                  "parameters": {
                    "id": 4116,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "121570:2:0"
                  },
                  "returnParameters": {
                    "id": 4118,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "121591:0:0"
                  },
                  "scope": 5009,
                  "src": "121538:189:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3768
                  ],
                  "body": {
                    "id": 4160,
                    "nodeType": "Block",
                    "src": "121801:234:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4139,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5008,
                            "src": "121811:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4140,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121811:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4141,
                        "nodeType": "ExpressionStatement",
                        "src": "121811:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4142,
                            "name": "_isValidPoolDelegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4951,
                            "src": "121845:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121845:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4144,
                        "nodeType": "ExpressionStatement",
                        "src": "121845:22:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4148,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4146,
                                "name": "newLockupPeriod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4135,
                                "src": "121885:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4147,
                                "name": "lockupPeriod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3970,
                                "src": "121904:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "121885:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a494e56414c49445f56414c5545",
                              "id": 4149,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "121918:18:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a5a414867ea5cb591d40a32d35f1223b4b87e725da3ea3d2b152d0ac394e45b4",
                                "typeString": "literal_string \"SL:INVALID_VALUE\""
                              },
                              "value": "SL:INVALID_VALUE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a5a414867ea5cb591d40a32d35f1223b4b87e725da3ea3d2b152d0ac394e45b4",
                                "typeString": "literal_string \"SL:INVALID_VALUE\""
                              }
                            ],
                            "id": 4145,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "121877:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121877:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4151,
                        "nodeType": "ExpressionStatement",
                        "src": "121877:60:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4152,
                            "name": "lockupPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3970,
                            "src": "121947:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4153,
                            "name": "newLockupPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4135,
                            "src": "121962:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "121947:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4155,
                        "nodeType": "ExpressionStatement",
                        "src": "121947:30:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4157,
                              "name": "newLockupPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4135,
                              "src": "122012:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4156,
                            "name": "LockupPeriodUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3629,
                            "src": "121992:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 4158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "121992:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4159,
                        "nodeType": "EmitStatement",
                        "src": "121987:41:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "c771c390",
                  "id": 4161,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4137,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "121792:8:0"
                  },
                  "parameters": {
                    "id": 4136,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4135,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4161,
                        "src": "121758:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4134,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "121758:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "121757:25:0"
                  },
                  "returnParameters": {
                    "id": 4138,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "121801:0:0"
                  },
                  "scope": 5009,
                  "src": "121733:302:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3776
                  ],
                  "body": {
                    "id": 4178,
                    "nodeType": "Block",
                    "src": "122106:50:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4174,
                              "name": "dst",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4163,
                              "src": "122140:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4175,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4165,
                              "src": "122145:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4171,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3961,
                              "src": "122116:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3289,
                            "src": "122116:23: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": 4176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "122116:33:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4177,
                        "nodeType": "ExpressionStatement",
                        "src": "122116:33:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "f2d5d56b",
                  "id": 4179,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": null,
                      "id": 4168,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 4167,
                        "name": "isPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4089,
                        "src": "122081:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "122081:6:0"
                    }
                  ],
                  "name": "pull",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4169,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "122097:8:0"
                  },
                  "parameters": {
                    "id": 4166,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4163,
                        "mutability": "mutable",
                        "name": "dst",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4179,
                        "src": "122055:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4162,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "122055:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4165,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4179,
                        "src": "122068:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4164,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "122068:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122054:26:0"
                  },
                  "returnParameters": {
                    "id": 4170,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "122106:0:0"
                  },
                  "scope": 5009,
                  "src": "122041:115:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3782
                  ],
                  "body": {
                    "id": 4197,
                    "nodeType": "Block",
                    "src": "122229:86:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4187,
                            "name": "bptLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3485,
                            "src": "122239:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4190,
                                "name": "bptsBurned",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4181,
                                "src": "122265:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4188,
                                "name": "bptLosses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3485,
                                "src": "122251:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4189,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 212,
                              "src": "122251:13: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": 4191,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "122251:25:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "122239:37:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4193,
                        "nodeType": "ExpressionStatement",
                        "src": "122239:37:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4194,
                            "name": "updateLossesReceived",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1865,
                            "src": "122286:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 4195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "122286:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4196,
                        "nodeType": "ExpressionStatement",
                        "src": "122286:22:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "bcd01be7",
                  "id": 4198,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": null,
                      "id": 4184,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 4183,
                        "name": "isPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4089,
                        "src": "122204:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "122204:6:0"
                    }
                  ],
                  "name": "updateLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4185,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "122220:8:0"
                  },
                  "parameters": {
                    "id": 4182,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4181,
                        "mutability": "mutable",
                        "name": "bptsBurned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4198,
                        "src": "122184:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4180,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "122184:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122183:20:0"
                  },
                  "returnParameters": {
                    "id": 4186,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "122229:0:0"
                  },
                  "scope": 5009,
                  "src": "122162:153:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3788
                  ],
                  "body": {
                    "id": 4281,
                    "nodeType": "Block",
                    "src": "122475:540:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4206,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5008,
                            "src": "122485:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "122485:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4208,
                        "nodeType": "ExpressionStatement",
                        "src": "122485:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4210,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "122530:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4211,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "122530:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4209,
                            "name": "_isAllowed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4975,
                            "src": "122519:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$",
                              "typeString": "function (address) view"
                            }
                          },
                          "id": 4212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "122519:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4213,
                        "nodeType": "ExpressionStatement",
                        "src": "122519:22:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4214,
                              "name": "unstakeCooldown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3980,
                              "src": "122552:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4217,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4215,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "122568:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4216,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "122568:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "122552:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 4220,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "122590: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": 4219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "122582:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 4218,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "122582:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 4221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "122582:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "122552:40:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4223,
                        "nodeType": "ExpressionStatement",
                        "src": "122552:40:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4225,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "122703:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4226,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "122703:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4227,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4200,
                              "src": "122715:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4224,
                            "name": "_updateStakeDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4341,
                            "src": "122686:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4228,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "122686:33:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4229,
                        "nodeType": "ExpressionStatement",
                        "src": "122686:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4233,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "122758:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "122758:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4237,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "122778:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                    "typeString": "contract StakeLocker"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                    "typeString": "contract StakeLocker"
                                  }
                                ],
                                "id": 4236,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "122770:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4235,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "122770:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4238,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "122770:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4239,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4200,
                              "src": "122785: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": 4230,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3961,
                              "src": "122730:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4232,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3314,
                            "src": "122730:27: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": 4240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "122730:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4241,
                        "nodeType": "ExpressionStatement",
                        "src": "122730:59:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4243,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "122805:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4244,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "122805:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4245,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4200,
                              "src": "122817:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4242,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1801
                            ],
                            "referencedDeclaration": 1801,
                            "src": "122799:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "122799:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4247,
                        "nodeType": "ExpressionStatement",
                        "src": "122799:22:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4249,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "122843:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4250,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "122843:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4251,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4200,
                              "src": "122855:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4248,
                            "name": "Stake",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3643,
                            "src": "122837:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "122837:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4253,
                        "nodeType": "EmitStatement",
                        "src": "122832:27:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4255,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "122883:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4256,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "122883:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 4259,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "122903: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": 4258,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "122895:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 4257,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "122895:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4260,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "122895: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": 4254,
                            "name": "Cooldown",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3636,
                            "src": "122874:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "122874:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4262,
                        "nodeType": "EmitStatement",
                        "src": "122869:37:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4266,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "122944:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                    "typeString": "contract StakeLocker"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                    "typeString": "contract StakeLocker"
                                  }
                                ],
                                "id": 4265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "122936:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4264,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "122936:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "122936:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4270,
                                  "name": "stakeAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3961,
                                  "src": "122959:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 4269,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "122951:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4268,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "122951:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4271,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "122951:19:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4276,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "123001:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                        "typeString": "contract StakeLocker"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                        "typeString": "contract StakeLocker"
                                      }
                                    ],
                                    "id": 4275,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "122993:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4274,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "122993:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4277,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "122993:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4272,
                                  "name": "stakeAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3961,
                                  "src": "122972:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 4273,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16,
                                "src": "122972:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 4278,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "122972:35: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": 4263,
                            "name": "BalanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3610,
                            "src": "122921:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 4279,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "122921:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4280,
                        "nodeType": "EmitStatement",
                        "src": "122916:92:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "a694fc3a",
                  "id": 4282,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": null,
                      "id": 4203,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 4202,
                        "name": "whenNotPaused",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3894,
                        "src": "122443:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "122443:13:0"
                    }
                  ],
                  "name": "stake",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4204,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "122466:8:0"
                  },
                  "parameters": {
                    "id": 4201,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4200,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4282,
                        "src": "122430:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4199,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "122430:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122429:13:0"
                  },
                  "returnParameters": {
                    "id": 4205,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "122475:0:0"
                  },
                  "scope": 5009,
                  "src": "122415:600:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 4340,
                    "nodeType": "Block",
                    "src": "123341:492:0",
                    "statements": [
                      {
                        "assignments": [
                          4291
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4291,
                            "mutability": "mutable",
                            "name": "prevDate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4340,
                            "src": "123351:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4290,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "123351:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4295,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 4292,
                            "name": "stakeDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3975,
                            "src": "123370:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4294,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4293,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4285,
                            "src": "123380:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "123370:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "123351:37:0"
                      },
                      {
                        "assignments": [
                          4297
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4297,
                            "mutability": "mutable",
                            "name": "balance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4340,
                            "src": "123398:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4296,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "123398:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4301,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4299,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4285,
                              "src": "123426:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4298,
                            "name": "balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 675,
                            "src": "123416:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 4300,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "123416:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "123398:36:0"
                      },
                      {
                        "assignments": [
                          4303
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4303,
                            "mutability": "mutable",
                            "name": "newDate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4340,
                            "src": "123592:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4302,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "123592:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4328,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4309,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4306,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 4304,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4297,
                                    "src": "123611:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 4305,
                                    "name": "amt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4287,
                                    "src": "123621:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "123611:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 4307,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "123610:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4308,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "123628:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "123610:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 4326,
                            "name": "prevDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4291,
                            "src": "123730:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "123610:128:0",
                          "trueExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4323,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 4321,
                                      "name": "balance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4297,
                                      "src": "123700:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 4322,
                                      "name": "amt",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4287,
                                      "src": "123710:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "123700:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4318,
                                        "name": "amt",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4287,
                                        "src": "123691:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 4315,
                                            "name": "prevDate",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4291,
                                            "src": "123677:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 4312,
                                              "name": "block",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -4,
                                              "src": "123657:5:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_block",
                                                "typeString": "block"
                                              }
                                            },
                                            "id": 4313,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "123657:15:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 4314,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "sub",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 229,
                                          "src": "123657: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": 4316,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "123657:29:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 4317,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 292,
                                      "src": "123657: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": 4319,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "123657:38:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4320,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 309,
                                  "src": "123657: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": 4324,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "123657:57:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4310,
                                "name": "prevDate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4291,
                                "src": "123644:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4311,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 212,
                              "src": "123644: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": 4325,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "123644:71:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "123592:146:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4329,
                              "name": "stakeDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3975,
                              "src": "123749:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4331,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4330,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4285,
                              "src": "123759:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "123749:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4332,
                            "name": "newDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4303,
                            "src": "123770:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "123749:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4334,
                        "nodeType": "ExpressionStatement",
                        "src": "123749:28:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4336,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4285,
                              "src": "123809:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4337,
                              "name": "newDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4303,
                              "src": "123818:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4335,
                            "name": "StakeDateUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3624,
                            "src": "123792:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "123792:34:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4339,
                        "nodeType": "EmitStatement",
                        "src": "123787:39:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4283,
                    "nodeType": "StructuredDocumentation",
                    "src": "123021:250:0",
                    "text": "@dev   Updates information used to calculate unstake delay.\n@dev   It emits a `StakeDateUpdated` event.\n@param account The Staker that deposited BPTs.\n@param amt     Amount of BPTs the Staker has deposited."
                  },
                  "id": 4341,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateStakeDate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4288,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4285,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4341,
                        "src": "123302:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4284,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123302:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4287,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4341,
                        "src": "123319:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4286,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "123319:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "123301:30:0"
                  },
                  "returnParameters": {
                    "id": 4289,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "123341:0:0"
                  },
                  "scope": 5009,
                  "src": "123276:557:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3792
                  ],
                  "body": {
                    "id": 4373,
                    "nodeType": "Block",
                    "src": "123884:187:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4347,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "123912:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 4348,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "123912:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 4346,
                                  "name": "balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 675,
                                  "src": "123902:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 4349,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "123902:21:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 4352,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "123935: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": 4351,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "123927:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 4350,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "123927:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 4353,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "123927:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "123902:35:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a5a45524f5f42414c414e4345",
                              "id": 4355,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "123939:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f5239638f8c796408b2e1b38bd19b68c7fbe4b5e029286159c30baec2fcf134a",
                                "typeString": "literal_string \"SL:ZERO_BALANCE\""
                              },
                              "value": "SL:ZERO_BALANCE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f5239638f8c796408b2e1b38bd19b68c7fbe4b5e029286159c30baec2fcf134a",
                                "typeString": "literal_string \"SL:ZERO_BALANCE\""
                              }
                            ],
                            "id": 4345,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "123894:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "123894:63:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4357,
                        "nodeType": "ExpressionStatement",
                        "src": "123894:63:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4358,
                              "name": "unstakeCooldown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3980,
                              "src": "123967:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4361,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4359,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "123983:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4360,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "123983:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "123967:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4362,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "123997:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 4363,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "123997:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "123967:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4365,
                        "nodeType": "ExpressionStatement",
                        "src": "123967:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4367,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "124036:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4368,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "124036:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4369,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "124048:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 4370,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "124048:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4366,
                            "name": "Cooldown",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3636,
                            "src": "124027:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "124027:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4372,
                        "nodeType": "EmitStatement",
                        "src": "124022:42:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "8a10555c",
                  "id": 4374,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "intendToUnstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4343,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "123875:8:0"
                  },
                  "parameters": {
                    "id": 4342,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "123863:2:0"
                  },
                  "returnParameters": {
                    "id": 4344,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "123884:0:0"
                  },
                  "scope": 5009,
                  "src": "123839:232:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3796
                  ],
                  "body": {
                    "id": 4407,
                    "nodeType": "Block",
                    "src": "124120:175:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4387,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 4379,
                                  "name": "unstakeCooldown",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3980,
                                  "src": "124138:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 4382,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4380,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "124154:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 4381,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "124154:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "124138:27:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 4385,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "124177: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": 4384,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "124169:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 4383,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "124169:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 4386,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "124169:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "124138:41:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a4e4f545f554e5354414b494e47",
                              "id": 4388,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "124181:18:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a946b8720fb301601d76a8be9cb591b8c5f746f3360ceee357cddf0b4a7eca8a",
                                "typeString": "literal_string \"SL:NOT_UNSTAKING\""
                              },
                              "value": "SL:NOT_UNSTAKING"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a946b8720fb301601d76a8be9cb591b8c5f746f3360ceee357cddf0b4a7eca8a",
                                "typeString": "literal_string \"SL:NOT_UNSTAKING\""
                              }
                            ],
                            "id": 4378,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "124130:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4389,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "124130:70:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4390,
                        "nodeType": "ExpressionStatement",
                        "src": "124130:70:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4396,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4391,
                              "name": "unstakeCooldown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3980,
                              "src": "124210:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4394,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4392,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "124226:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4393,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "124226:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "124210:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "124240:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "124210:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4397,
                        "nodeType": "ExpressionStatement",
                        "src": "124210:31:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4399,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "124265:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4400,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "124265:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 4403,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "124285: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": 4402,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "124277:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 4401,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "124277:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4404,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "124277: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": 4398,
                            "name": "Cooldown",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3636,
                            "src": "124256:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4405,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "124256:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4406,
                        "nodeType": "EmitStatement",
                        "src": "124251:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "4ab17969",
                  "id": 4408,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelUnstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4376,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "124111:8:0"
                  },
                  "parameters": {
                    "id": 4375,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "124099:2:0"
                  },
                  "returnParameters": {
                    "id": 4377,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "124120:0:0"
                  },
                  "scope": 5009,
                  "src": "124077:218:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3802
                  ],
                  "body": {
                    "id": 4507,
                    "nodeType": "Block",
                    "src": "124372:953:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4418,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5008,
                            "src": "124382:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "124382:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4420,
                        "nodeType": "ExpressionStatement",
                        "src": "124382:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4433,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4427,
                                    "name": "amt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4410,
                                    "src": "124451:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 4423,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -15,
                                          "src": "124435:3:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 4424,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "124435:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      ],
                                      "id": 4422,
                                      "name": "balanceOf",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 675,
                                      "src": "124425:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                        "typeString": "function (address) view returns (uint256)"
                                      }
                                    },
                                    "id": 4425,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "124425:21:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4426,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 229,
                                  "src": "124425:25: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": 4428,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "124425:30:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 4429,
                                  "name": "totalCustodyAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3997,
                                  "src": "124459:21:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 4432,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4430,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "124481:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 4431,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "124481:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "124459:33:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "124425:67:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a494e5355465f554e5354414b4541424c455f42414c",
                              "id": 4434,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "124494:26:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b333a52258eeb25954211a4268065b8099a91e940ef1df0197e02398996c30d0",
                                "typeString": "literal_string \"SL:INSUF_UNSTAKEABLE_BAL\""
                              },
                              "value": "SL:INSUF_UNSTAKEABLE_BAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b333a52258eeb25954211a4268065b8099a91e940ef1df0197e02398996c30d0",
                                "typeString": "literal_string \"SL:INSUF_UNSTAKEABLE_BAL\""
                              }
                            ],
                            "id": 4421,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "124417:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "124417:104:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4436,
                        "nodeType": "ExpressionStatement",
                        "src": "124417:104:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4439,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "124614:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 4440,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "124614:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 4438,
                                "name": "isUnstakeAllowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4881,
                                "src": "124597:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 4441,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "124597:28:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a4f5554534944455f434f4f4c444f574e",
                              "id": 4442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "124666:21:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a79d6b7496782e2e865393f17d525ca16e9115e8f4c97df733c1dd0e68f6a248",
                                "typeString": "literal_string \"SL:OUTSIDE_COOLDOWN\""
                              },
                              "value": "SL:OUTSIDE_COOLDOWN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a79d6b7496782e2e865393f17d525ca16e9115e8f4c97df733c1dd0e68f6a248",
                                "typeString": "literal_string \"SL:OUTSIDE_COOLDOWN\""
                              }
                            ],
                            "id": 4437,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "124589:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "124589:99:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4444,
                        "nodeType": "ExpressionStatement",
                        "src": "124589:99:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4455,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4451,
                                    "name": "lockupPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3970,
                                    "src": "124732:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 4446,
                                      "name": "stakeDate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3975,
                                      "src": "124706:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 4449,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4447,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "124716:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 4448,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "124716:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "124706:21:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4450,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 212,
                                  "src": "124706:25: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": 4452,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "124706:39:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4453,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "124749:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 4454,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "124749:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "124706:58:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a46554e44535f4c4f434b4544",
                              "id": 4456,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "124775:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7034c9f609e334dda1087322fe03795fe0e900ee0d71c11c456f9d5be33e874a",
                                "typeString": "literal_string \"SL:FUNDS_LOCKED\""
                              },
                              "value": "SL:FUNDS_LOCKED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7034c9f609e334dda1087322fe03795fe0e900ee0d71c11c456f9d5be33e874a",
                                "typeString": "literal_string \"SL:FUNDS_LOCKED\""
                              }
                            ],
                            "id": 4445,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "124698:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "124698:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4458,
                        "nodeType": "ExpressionStatement",
                        "src": "124698:95:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4459,
                            "name": "updateFundsReceived",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1446,
                            "src": "124804:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 4460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "124804:21:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4461,
                        "nodeType": "ExpressionStatement",
                        "src": "124804:21:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4463,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "124911:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4464,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "124911:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4465,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4410,
                              "src": "124923:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4462,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1844
                            ],
                            "referencedDeclaration": 1844,
                            "src": "124905:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "124905:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4467,
                        "nodeType": "ExpressionStatement",
                        "src": "124905:22:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4468,
                            "name": "withdrawFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4560
                            ],
                            "referencedDeclaration": 4560,
                            "src": "124989:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 4469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "124989:15:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4470,
                        "nodeType": "ExpressionStatement",
                        "src": "124989:15:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4474,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "125103:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4475,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "125103:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 4478,
                                    "name": "_recognizeLosses",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      3534
                                    ],
                                    "referencedDeclaration": 3534,
                                    "src": "125123:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                      "typeString": "function () returns (uint256)"
                                    }
                                  },
                                  "id": 4479,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "125123:18:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4476,
                                  "name": "amt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4410,
                                  "src": "125115:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 4477,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 229,
                                "src": "125115: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": 4480,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "125115:27: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,
                              "id": 4471,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3961,
                              "src": "125079:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4473,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3289,
                            "src": "125079:23: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": 4481,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "125079:64:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4482,
                        "nodeType": "ExpressionStatement",
                        "src": "125079:64:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4484,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "125200:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4485,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "125200:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4486,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4410,
                              "src": "125212:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4483,
                            "name": "Unstake",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3650,
                            "src": "125192:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "125192:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4488,
                        "nodeType": "EmitStatement",
                        "src": "125187:29:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4492,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "125254:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                    "typeString": "contract StakeLocker"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                    "typeString": "contract StakeLocker"
                                  }
                                ],
                                "id": 4491,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "125246:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4490,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "125246:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "125246:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4496,
                                  "name": "stakeAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3961,
                                  "src": "125269:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 4495,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "125261:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4494,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "125261:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4497,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "125261:19:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4502,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "125311:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                        "typeString": "contract StakeLocker"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                        "typeString": "contract StakeLocker"
                                      }
                                    ],
                                    "id": 4501,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "125303:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4500,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "125303:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4503,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "125303:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4498,
                                  "name": "stakeAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3961,
                                  "src": "125282:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 4499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16,
                                "src": "125282:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 4504,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "125282:35: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": 4489,
                            "name": "BalanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3610,
                            "src": "125231:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 4505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "125231:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4506,
                        "nodeType": "EmitStatement",
                        "src": "125226:92:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "2e17de78",
                  "id": 4508,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4414,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "124360:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "124360:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "id": 4416,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 4413,
                        "name": "canUnstake",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4060,
                        "src": "124349:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$_t_address_$",
                          "typeString": "modifier (address)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "124349:22:0"
                    }
                  ],
                  "name": "unstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4412,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "124340:8:0"
                  },
                  "parameters": {
                    "id": 4411,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4410,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4508,
                        "src": "124318:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4409,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "124318:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "124317:13:0"
                  },
                  "returnParameters": {
                    "id": 4417,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "124372:0:0"
                  },
                  "scope": 5009,
                  "src": "124301:1024:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120,
                    3807
                  ],
                  "body": {
                    "id": 4559,
                    "nodeType": "Block",
                    "src": "125397:356:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4514,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5008,
                            "src": "125407:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "125407:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4516,
                        "nodeType": "ExpressionStatement",
                        "src": "125407:24:0"
                      },
                      {
                        "assignments": [
                          4518
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4518,
                            "mutability": "mutable",
                            "name": "withdrawableFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4559,
                            "src": "125442:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4517,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "125442:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4521,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4519,
                            "name": "_prepareWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1200,
                            "src": "125470:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                              "typeString": "function () returns (uint256)"
                            }
                          },
                          "id": 4520,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "125470:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "125442:46:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4522,
                            "name": "withdrawableFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4518,
                            "src": "125503:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 4525,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "125532: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": 4524,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "125524:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 4523,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "125524:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 4526,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "125524:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "125503:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4529,
                        "nodeType": "IfStatement",
                        "src": "125499:44:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 4513,
                          "id": 4528,
                          "nodeType": "Return",
                          "src": "125536:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4533,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "125577:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4534,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "125577:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4535,
                              "name": "withdrawableFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4518,
                              "src": "125589:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4530,
                              "name": "fundsToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3482,
                              "src": "125553:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 4532,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3289,
                            "src": "125553:23: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": 4536,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "125553:54:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4537,
                        "nodeType": "ExpressionStatement",
                        "src": "125553:54:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4541,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "125645:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                    "typeString": "contract StakeLocker"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                    "typeString": "contract StakeLocker"
                                  }
                                ],
                                "id": 4540,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "125637:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4539,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "125637:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4542,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "125637:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4545,
                                  "name": "fundsToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3482,
                                  "src": "125660:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 4544,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "125652:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4543,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "125652:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4546,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "125652:19:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4551,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "125702:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                        "typeString": "contract StakeLocker"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_StakeLocker_$5009",
                                        "typeString": "contract StakeLocker"
                                      }
                                    ],
                                    "id": 4550,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "125694:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4549,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "125694:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4552,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "125694:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4547,
                                  "name": "fundsToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3482,
                                  "src": "125673:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 4548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16,
                                "src": "125673:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 4553,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "125673:35: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": 4538,
                            "name": "BalanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3610,
                            "src": "125622:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 4554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "125622:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4555,
                        "nodeType": "EmitStatement",
                        "src": "125617:92:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4556,
                            "name": "_updateFundsTokenBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3594
                            ],
                            "referencedDeclaration": 3594,
                            "src": "125720:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 4557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "125720:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 4558,
                        "nodeType": "ExpressionStatement",
                        "src": "125720:26:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "24600fc3",
                  "id": 4560,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4512,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "contractScope": null,
                        "id": 4510,
                        "name": "IBasicFDT",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 141,
                        "src": "125372:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBasicFDT_$141",
                          "typeString": "contract IBasicFDT"
                        }
                      },
                      {
                        "contractScope": null,
                        "id": 4511,
                        "name": "IStakeLocker",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3850,
                        "src": "125383:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IStakeLocker_$3850",
                          "typeString": "contract IStakeLocker"
                        }
                      }
                    ],
                    "src": "125363:33:0"
                  },
                  "parameters": {
                    "id": 4509,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125353:2:0"
                  },
                  "returnParameters": {
                    "id": 4513,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125397:0:0"
                  },
                  "scope": 5009,
                  "src": "125331:422:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3815
                  ],
                  "body": {
                    "id": 4654,
                    "nodeType": "Block",
                    "src": "125846:772:0",
                    "statements": [
                      {
                        "assignments": [
                          4569
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4569,
                            "mutability": "mutable",
                            "name": "oldAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4654,
                            "src": "125856:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4568,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "125856:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4576,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4570,
                              "name": "custodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3992,
                              "src": "125884:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 4573,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4571,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "125901:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "125901:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "125884:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4575,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4574,
                            "name": "custodian",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4562,
                            "src": "125913:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "125884:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "125856:67:0"
                      },
                      {
                        "assignments": [
                          4578
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4578,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4654,
                            "src": "125933:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4577,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "125933:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4583,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4581,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4564,
                              "src": "125978:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4579,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4569,
                              "src": "125961:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4580,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 212,
                            "src": "125961: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": 4582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "125961:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "125933:52:0"
                      },
                      {
                        "assignments": [
                          4585
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4585,
                            "mutability": "mutable",
                            "name": "newTotalAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4654,
                            "src": "125995:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4584,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "125995:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4593,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4591,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4564,
                              "src": "126061:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4586,
                                "name": "totalCustodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3997,
                                "src": "126023:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 4589,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4587,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "126045:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4588,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "126045:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "126023:33:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 212,
                            "src": "126023: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": 4592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "126023:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "125995:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 4600,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4595,
                                "name": "custodian",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4562,
                                "src": "126087:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 4598,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "126108: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": 4597,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "126100:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 4596,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "126100:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 4599,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "126100:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "126087:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a494e56414c49445f435553544f4449414e",
                              "id": 4601,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "126131:22:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8c88412ec3ebc759654f3d4b95500633c7ba5974b713cc128e11fb5056a192c2",
                                "typeString": "literal_string \"SL:INVALID_CUSTODIAN\""
                              },
                              "value": "SL:INVALID_CUSTODIAN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8c88412ec3ebc759654f3d4b95500633c7ba5974b713cc128e11fb5056a192c2",
                                "typeString": "literal_string \"SL:INVALID_CUSTODIAN\""
                              }
                            ],
                            "id": 4594,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "126079:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "126079:75:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4603,
                        "nodeType": "ExpressionStatement",
                        "src": "126079:75:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4610,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4605,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4564,
                                "src": "126172:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 4608,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "126193: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": 4607,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "126185:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 4606,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "126185:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 4609,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "126185:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "126172:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a494e56414c49445f414d54",
                              "id": 4611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "126216:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_983542b2864036243ae7fb0c15f4658ffa53c6b3240b25951710ce1d9b804686",
                                "typeString": "literal_string \"SL:INVALID_AMT\""
                              },
                              "value": "SL:INVALID_AMT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_983542b2864036243ae7fb0c15f4658ffa53c6b3240b25951710ce1d9b804686",
                                "typeString": "literal_string \"SL:INVALID_AMT\""
                              }
                            ],
                            "id": 4604,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "126164:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "126164:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4613,
                        "nodeType": "ExpressionStatement",
                        "src": "126164:69:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4620,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4615,
                                "name": "newTotalAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4585,
                                "src": "126251:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4617,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "126282:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 4618,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "126282:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 4616,
                                  "name": "balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 675,
                                  "src": "126272:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 4619,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "126272:21:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "126251:42:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a494e5355465f42414c414e4345",
                              "id": 4621,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "126295:18:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_81928d414ace419e44e7d74e9b84b156c19f73d7a8daf53450f1379d42560ee9",
                                "typeString": "literal_string \"SL:INSUF_BALANCE\""
                              },
                              "value": "SL:INSUF_BALANCE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_81928d414ace419e44e7d74e9b84b156c19f73d7a8daf53450f1379d42560ee9",
                                "typeString": "literal_string \"SL:INSUF_BALANCE\""
                              }
                            ],
                            "id": 4614,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "126243:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4622,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "126243:71:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4623,
                        "nodeType": "ExpressionStatement",
                        "src": "126243:71:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4624,
                                "name": "custodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3992,
                                "src": "126325:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 4628,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4625,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "126342:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "126342:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "126325:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4629,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4627,
                              "name": "custodian",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4562,
                              "src": "126354:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "126325:39:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4630,
                            "name": "newAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4578,
                            "src": "126367:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "126325:54:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4632,
                        "nodeType": "ExpressionStatement",
                        "src": "126325:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4633,
                              "name": "totalCustodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3997,
                              "src": "126389:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4636,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4634,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "126411:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4635,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "126411:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "126389:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4637,
                            "name": "newTotalAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4585,
                            "src": "126431:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "126389:59:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4639,
                        "nodeType": "ExpressionStatement",
                        "src": "126389:59:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4641,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "126487:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "126487:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4643,
                              "name": "custodian",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4562,
                              "src": "126499:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4644,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4569,
                              "src": "126510:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4645,
                              "name": "newAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4578,
                              "src": "126524: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": 4640,
                            "name": "CustodyAllowanceChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3672,
                            "src": "126463:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 4646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "126463:74:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4647,
                        "nodeType": "EmitStatement",
                        "src": "126458:79:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4649,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "126581:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4650,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "126581:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4651,
                              "name": "newTotalAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4585,
                              "src": "126593:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4648,
                            "name": "TotalCustodyAllowanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3679,
                            "src": "126552:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "126552:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4653,
                        "nodeType": "EmitStatement",
                        "src": "126547:64:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "27f91856",
                  "id": 4655,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4566,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "125837:8:0"
                  },
                  "parameters": {
                    "id": 4565,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4562,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4655,
                        "src": "125793:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4561,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "125793:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4564,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4655,
                        "src": "125812:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4563,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "125812:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125792:35:0"
                  },
                  "returnParameters": {
                    "id": 4567,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125846:0:0"
                  },
                  "scope": 5009,
                  "src": "125759:859:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3825
                  ],
                  "body": {
                    "id": 4744,
                    "nodeType": "Block",
                    "src": "126713:683:0",
                    "statements": [
                      {
                        "assignments": [
                          4666
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4666,
                            "mutability": "mutable",
                            "name": "oldAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4744,
                            "src": "126723:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4665,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "126723:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4673,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4667,
                              "name": "custodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3992,
                              "src": "126746:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 4669,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4668,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4657,
                              "src": "126763:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "126746:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4672,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4670,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "126769:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4671,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "126769:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "126746:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "126723:57:0"
                      },
                      {
                        "assignments": [
                          4675
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4675,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4744,
                            "src": "126790:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4674,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "126790:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4680,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4678,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4661,
                              "src": "126830:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4676,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4666,
                              "src": "126813:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4677,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 229,
                            "src": "126813: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": 4679,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "126813:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "126790:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 4684,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4682,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4659,
                                "src": "126856:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4683,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4657,
                                "src": "126862:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "126856:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a494e56414c49445f5245434549564552",
                              "id": 4685,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "126880:21:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_63aa09548796742cdc4ea8033645470cab9ff97aa6c213cb2c4c004f5b0a20a3",
                                "typeString": "literal_string \"SL:INVALID_RECEIVER\""
                              },
                              "value": "SL:INVALID_RECEIVER"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_63aa09548796742cdc4ea8033645470cab9ff97aa6c213cb2c4c004f5b0a20a3",
                                "typeString": "literal_string \"SL:INVALID_RECEIVER\""
                              }
                            ],
                            "id": 4681,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "126848:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "126848:54:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4687,
                        "nodeType": "ExpressionStatement",
                        "src": "126848:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4694,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4689,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4661,
                                "src": "126920:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 4692,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "126938: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": 4691,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "126930:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 4690,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "126930:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 4693,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "126930:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "126920:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a494e56414c49445f414d54",
                              "id": 4695,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "126944:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_983542b2864036243ae7fb0c15f4658ffa53c6b3240b25951710ce1d9b804686",
                                "typeString": "literal_string \"SL:INVALID_AMT\""
                              },
                              "value": "SL:INVALID_AMT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_983542b2864036243ae7fb0c15f4658ffa53c6b3240b25951710ce1d9b804686",
                                "typeString": "literal_string \"SL:INVALID_AMT\""
                              }
                            ],
                            "id": 4688,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "126912:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "126912:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4697,
                        "nodeType": "ExpressionStatement",
                        "src": "126912:49:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4705,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4698,
                                "name": "custodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3992,
                                "src": "126972:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 4702,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4699,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4657,
                                "src": "126989:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "126972:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4703,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4700,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "126995:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4701,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "126995:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "126972:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4704,
                            "name": "newAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4675,
                            "src": "127009:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "126972:49:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4706,
                        "nodeType": "ExpressionStatement",
                        "src": "126972:49:0"
                      },
                      {
                        "assignments": [
                          4708
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4708,
                            "mutability": "mutable",
                            "name": "newTotalAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4744,
                            "src": "127031:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4707,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "127031:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4715,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4713,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4661,
                              "src": "127100:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4709,
                                "name": "totalCustodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3997,
                                "src": "127068:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 4711,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4710,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4657,
                                "src": "127090:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "127068:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4712,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 229,
                            "src": "127068: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": 4714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "127068:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "127031:76:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4716,
                              "name": "totalCustodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3997,
                              "src": "127117:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 4718,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4717,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4657,
                              "src": "127139:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "127117:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4719,
                            "name": "newTotalAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4708,
                            "src": "127154:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "127117:54:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4721,
                        "nodeType": "ExpressionStatement",
                        "src": "127117:54:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4723,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "127202:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4724,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "127202:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4725,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4657,
                              "src": "127214:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4726,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4659,
                              "src": "127220:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4727,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4661,
                              "src": "127224: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": 4722,
                            "name": "CustodyTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3661,
                            "src": "127186:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 4728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "127186:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4729,
                        "nodeType": "EmitStatement",
                        "src": "127181:50:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4731,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4657,
                              "src": "127270:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4732,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "127276:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4733,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "127276:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4734,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4666,
                              "src": "127288:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4735,
                              "name": "newAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4675,
                              "src": "127302: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": 4730,
                            "name": "CustodyAllowanceChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3672,
                            "src": "127246:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 4736,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "127246:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4737,
                        "nodeType": "EmitStatement",
                        "src": "127241:74:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4739,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "127359:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "127359:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4741,
                              "name": "newTotalAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4708,
                              "src": "127371:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4738,
                            "name": "TotalCustodyAllowanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3679,
                            "src": "127330:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "127330:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4743,
                        "nodeType": "EmitStatement",
                        "src": "127325:64:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "2ac04ac8",
                  "id": 4745,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4663,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "126704:8:0"
                  },
                  "parameters": {
                    "id": 4662,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4657,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4745,
                        "src": "126653:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4656,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126653:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4659,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4745,
                        "src": "126667:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4658,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126667:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4661,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4745,
                        "src": "126679:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4660,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "126679:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126652:42:0"
                  },
                  "returnParameters": {
                    "id": 4664,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "126713:0:0"
                  },
                  "scope": 5009,
                  "src": "126624:772:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    1758
                  ],
                  "body": {
                    "id": 4823,
                    "nodeType": "Block",
                    "src": "127722:865:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4759,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5008,
                            "src": "127732:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4760,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "127732:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4761,
                        "nodeType": "ExpressionStatement",
                        "src": "127732:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4771,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4767,
                                    "name": "lockupPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3970,
                                    "src": "127794:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 4763,
                                      "name": "stakeDate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3975,
                                      "src": "127774:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 4765,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 4764,
                                      "name": "from",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4748,
                                      "src": "127784:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "127774:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4766,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 212,
                                  "src": "127774: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": 4768,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "127774:33:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4769,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "127811:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 4770,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "127811:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "127774:52:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a46554e44535f4c4f434b4544",
                              "id": 4772,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "127831:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7034c9f609e334dda1087322fe03795fe0e900ee0d71c11c456f9d5be33e874a",
                                "typeString": "literal_string \"SL:FUNDS_LOCKED\""
                              },
                              "value": "SL:FUNDS_LOCKED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7034c9f609e334dda1087322fe03795fe0e900ee0d71c11c456f9d5be33e874a",
                                "typeString": "literal_string \"SL:FUNDS_LOCKED\""
                              }
                            ],
                            "id": 4762,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "127766:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "127766:83:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4774,
                        "nodeType": "ExpressionStatement",
                        "src": "127766:83:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4785,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4780,
                                    "name": "wad",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4752,
                                    "src": "127942:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4777,
                                        "name": "from",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4748,
                                        "src": "127932:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 4776,
                                      "name": "balanceOf",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 675,
                                      "src": "127922:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                        "typeString": "function (address) view returns (uint256)"
                                      }
                                    },
                                    "id": 4778,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "127922:15:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4779,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 229,
                                  "src": "127922: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": 4781,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "127922:24:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 4782,
                                  "name": "totalCustodyAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3997,
                                  "src": "127950:21:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 4784,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 4783,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4748,
                                  "src": "127972:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "127950:27:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "127922:55:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a494e5355465f5452414e5346455241424c455f42414c",
                              "id": 4786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "127979:27:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_403c68e45430ae75fb76a5078e1e4a8ddcc8473ea9b415e54ce5bc17a6ed27bb",
                                "typeString": "literal_string \"SL:INSUF_TRANSFERABLE_BAL\""
                              },
                              "value": "SL:INSUF_TRANSFERABLE_BAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_403c68e45430ae75fb76a5078e1e4a8ddcc8473ea9b415e54ce5bc17a6ed27bb",
                                "typeString": "literal_string \"SL:INSUF_TRANSFERABLE_BAL\""
                              }
                            ],
                            "id": 4775,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "127914:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "127914:93:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4788,
                        "nodeType": "ExpressionStatement",
                        "src": "127914:93:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 4791,
                                    "name": "unstakeCooldown",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3980,
                                    "src": "128101:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 4793,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 4792,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4750,
                                    "src": "128117:2:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "128101:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4790,
                                "name": "isReceiveAllowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4909,
                                "src": "128084:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (uint256) view returns (bool)"
                                }
                              },
                              "id": 4794,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "128084:37:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a524543495049454e545f4e4f545f414c4c4f574544",
                              "id": 4795,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "128141:26:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7c5f5d0d5e1e560163b4c819c9c7ae48a68c87accf52330fe84bac2c7baf54aa",
                                "typeString": "literal_string \"SL:RECIPIENT_NOT_ALLOWED\""
                              },
                              "value": "SL:RECIPIENT_NOT_ALLOWED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7c5f5d0d5e1e560163b4c819c9c7ae48a68c87accf52330fe84bac2c7baf54aa",
                                "typeString": "literal_string \"SL:RECIPIENT_NOT_ALLOWED\""
                              }
                            ],
                            "id": 4789,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "128076:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4796,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "128076:92:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4797,
                        "nodeType": "ExpressionStatement",
                        "src": "128076:92:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4806,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4800,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4748,
                                    "src": "128254:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 4799,
                                  "name": "recognizableLossesOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1649,
                                  "src": "128233:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 4801,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "128233:26:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 4804,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "128271: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": 4803,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "128263:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 4802,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "128263:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 4805,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "128263:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "128233:40:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a5245434f475f4c4f53534553",
                              "id": 4807,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "128290:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c0b55fd4c2c01a1c98c2747887914611d9570dc77450d566d7ac70bbf6fab1ed",
                                "typeString": "literal_string \"SL:RECOG_LOSSES\""
                              },
                              "value": "SL:RECOG_LOSSES"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c0b55fd4c2c01a1c98c2747887914611d9570dc77450d566d7ac70bbf6fab1ed",
                                "typeString": "literal_string \"SL:RECOG_LOSSES\""
                              }
                            ],
                            "id": 4798,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "128225:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4808,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "128225:83:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4809,
                        "nodeType": "ExpressionStatement",
                        "src": "128225:83:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4811,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4750,
                              "src": "128429:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4812,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4752,
                              "src": "128433:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4810,
                            "name": "_updateStakeDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4341,
                            "src": "128412:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 4813,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "128412:25:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4814,
                        "nodeType": "ExpressionStatement",
                        "src": "128412:25:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4818,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4748,
                              "src": "128566:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4819,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4750,
                              "src": "128572:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4820,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4752,
                              "src": "128576: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": 4815,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "128550:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_StakeLocker_$5009",
                                "typeString": "contract super StakeLocker"
                              }
                            },
                            "id": 4817,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1758,
                            "src": "128550:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 4821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "128550:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4822,
                        "nodeType": "ExpressionStatement",
                        "src": "128550:30:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4746,
                    "nodeType": "StructuredDocumentation",
                    "src": "127402:222:0",
                    "text": "@dev   Transfers StakeLockerFDTs.\n@param from Address sending   StakeLockerFDTs.\n@param to   Address receiving StakeLockerFDTs.\n@param wad  Amount of StakeLockerFDTs to transfer."
                  },
                  "id": 4824,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4756,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4748,
                          "src": "127716:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 4757,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 4755,
                        "name": "canUnstake",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4060,
                        "src": "127705:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$_t_address_$",
                          "typeString": "modifier (address)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "127705:16:0"
                    }
                  ],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4754,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "127696:8:0"
                  },
                  "parameters": {
                    "id": 4753,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4748,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4824,
                        "src": "127648:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4747,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "127648:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4750,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4824,
                        "src": "127662:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4749,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "127662:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4752,
                        "mutability": "mutable",
                        "name": "wad",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4824,
                        "src": "127674:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4751,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "127674:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "127647:39:0"
                  },
                  "returnParameters": {
                    "id": 4758,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "127722:0:0"
                  },
                  "scope": 5009,
                  "src": "127629:958:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3829
                  ],
                  "body": {
                    "id": 4836,
                    "nodeType": "Block",
                    "src": "128719:74:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4828,
                            "name": "_isValidPoolDelegateOrPoolAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4934,
                            "src": "128729:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "128729:33:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4830,
                        "nodeType": "ExpressionStatement",
                        "src": "128729:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4831,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "128772:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_StakeLocker_$5009",
                                "typeString": "contract super StakeLocker"
                              }
                            },
                            "id": 4833,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_pause",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3920,
                            "src": "128772:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 4834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "128772:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4835,
                        "nodeType": "ExpressionStatement",
                        "src": "128772:14:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "8456cb59",
                  "id": 4837,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4826,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "128710:8:0"
                  },
                  "parameters": {
                    "id": 4825,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "128698:2:0"
                  },
                  "returnParameters": {
                    "id": 4827,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "128719:0:0"
                  },
                  "scope": 5009,
                  "src": "128684:109:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3833
                  ],
                  "body": {
                    "id": 4849,
                    "nodeType": "Block",
                    "src": "128836:76:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4841,
                            "name": "_isValidPoolDelegateOrPoolAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4934,
                            "src": "128846:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 4842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "128846:33:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4843,
                        "nodeType": "ExpressionStatement",
                        "src": "128846:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4844,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "128889:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_StakeLocker_$5009",
                                "typeString": "contract super StakeLocker"
                              }
                            },
                            "id": 4846,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_unpause",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3936,
                            "src": "128889:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 4847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "128889:16:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4848,
                        "nodeType": "ExpressionStatement",
                        "src": "128889:16:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "3f4ba83a",
                  "id": 4850,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4839,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "128827:8:0"
                  },
                  "parameters": {
                    "id": 4838,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "128815:2:0"
                  },
                  "returnParameters": {
                    "id": 4840,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "128836:0:0"
                  },
                  "scope": 5009,
                  "src": "128799:113:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3841
                  ],
                  "body": {
                    "id": 4880,
                    "nodeType": "Block",
                    "src": "129088:177:0",
                    "statements": [
                      {
                        "assignments": [
                          4859
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4859,
                            "mutability": "mutable",
                            "name": "globals",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4880,
                            "src": "129098:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                              "typeString": "contract IMapleGlobals"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4858,
                              "name": "IMapleGlobals",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 2371,
                              "src": "129098:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4862,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4860,
                            "name": "_globals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4994,
                            "src": "129122:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IMapleGlobals_$2371_$",
                              "typeString": "function () view returns (contract IMapleGlobals)"
                            }
                          },
                          "id": 4861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "129122:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "129098:34:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4878,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4873,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4863,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "129150:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 4864,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "129150:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 4871,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 4865,
                                          "name": "unstakeCooldown",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3980,
                                          "src": "129169:15:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                            "typeString": "mapping(address => uint256)"
                                          }
                                        },
                                        "id": 4867,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 4866,
                                          "name": "from",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4852,
                                          "src": "129185:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "129169:21:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 4868,
                                            "name": "globals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4859,
                                            "src": "129193:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                                              "typeString": "contract IMapleGlobals"
                                            }
                                          },
                                          "id": 4869,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "stakerCooldownPeriod",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 2046,
                                          "src": "129193:28:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                            "typeString": "function () view external returns (uint256)"
                                          }
                                        },
                                        "id": 4870,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "129193:30:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "129169:54:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 4872,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "129168:56:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "129150:74:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 4874,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "129149:76:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4875,
                                "name": "globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4859,
                                "src": "129229:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                                  "typeString": "contract IMapleGlobals"
                                }
                              },
                              "id": 4876,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "stakerUnstakeWindow",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2058,
                              "src": "129229:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 4877,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "129229:29:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "129149:109:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4857,
                        "id": 4879,
                        "nodeType": "Return",
                        "src": "129142:116:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "86bf1da3",
                  "id": 4881,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isUnstakeAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4854,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "129059:8:0"
                  },
                  "parameters": {
                    "id": 4853,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4852,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4881,
                        "src": "129038:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4851,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "129038:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "129037:14:0"
                  },
                  "returnParameters": {
                    "id": 4857,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4856,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4881,
                        "src": "129082:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4855,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "129082:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "129081:6:0"
                  },
                  "scope": 5009,
                  "src": "129012:253:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3849
                  ],
                  "body": {
                    "id": 4908,
                    "nodeType": "Block",
                    "src": "129359:169:0",
                    "statements": [
                      {
                        "assignments": [
                          4890
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4890,
                            "mutability": "mutable",
                            "name": "globals",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4908,
                            "src": "129369:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                              "typeString": "contract IMapleGlobals"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4889,
                              "name": "IMapleGlobals",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 2371,
                              "src": "129369:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4893,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4891,
                            "name": "_globals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4994,
                            "src": "129393:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IMapleGlobals_$2371_$",
                              "typeString": "function () view returns (contract IMapleGlobals)"
                            }
                          },
                          "id": 4892,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "129393:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "129369:34:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4906,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4894,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "129420:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 4895,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "129420:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4904,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4900,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 4896,
                                    "name": "_unstakeCooldown",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4883,
                                    "src": "129439:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4897,
                                        "name": "globals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4890,
                                        "src": "129458:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                                          "typeString": "contract IMapleGlobals"
                                        }
                                      },
                                      "id": 4898,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "stakerCooldownPeriod",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2046,
                                      "src": "129458:28:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                        "typeString": "function () view external returns (uint256)"
                                      }
                                    },
                                    "id": 4899,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "129458:30:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "129439:49:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4901,
                                      "name": "globals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4890,
                                      "src": "129491:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                                        "typeString": "contract IMapleGlobals"
                                      }
                                    },
                                    "id": 4902,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "stakerUnstakeWindow",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2058,
                                    "src": "129491:27:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view external returns (uint256)"
                                    }
                                  },
                                  "id": 4903,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "129491:29:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "129439:81:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 4905,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "129438:83:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "129420:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4888,
                        "id": 4907,
                        "nodeType": "Return",
                        "src": "129413:108:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "fab11078",
                  "id": 4909,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isReceiveAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4885,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "129330:8:0"
                  },
                  "parameters": {
                    "id": 4884,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4883,
                        "mutability": "mutable",
                        "name": "_unstakeCooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4909,
                        "src": "129297:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4882,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "129297:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "129296:26:0"
                  },
                  "returnParameters": {
                    "id": 4888,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4887,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4909,
                        "src": "129353:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4886,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "129353:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "129352:6:0"
                  },
                  "scope": 5009,
                  "src": "129271:257:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4933,
                    "nodeType": "Block",
                    "src": "129683:132:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 4921,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4914,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "129701:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 4915,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "129701:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 4917,
                                          "name": "pool",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3967,
                                          "src": "129721:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 4916,
                                        "name": "IPool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2866,
                                        "src": "129715:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IPool_$2866_$",
                                          "typeString": "type(contract IPool)"
                                        }
                                      },
                                      "id": 4918,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "129715:11:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IPool_$2866",
                                        "typeString": "contract IPool"
                                      }
                                    },
                                    "id": 4919,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "poolDelegate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2552,
                                    "src": "129715:24:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                      "typeString": "function () pure external returns (address)"
                                    }
                                  },
                                  "id": 4920,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "129715:26:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "129701:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4926,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "129768:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 4927,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "129768:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4923,
                                        "name": "pool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3967,
                                        "src": "129751:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 4922,
                                      "name": "IPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2866,
                                      "src": "129745:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IPool_$2866_$",
                                        "typeString": "type(contract IPool)"
                                      }
                                    },
                                    "id": 4924,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "129745:11:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IPool_$2866",
                                      "typeString": "contract IPool"
                                    }
                                  },
                                  "id": 4925,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "poolAdmins",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2644,
                                  "src": "129745:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                    "typeString": "function (address) view external returns (bool)"
                                  }
                                },
                                "id": 4928,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "129745:34:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "129701:78:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a4e4f545f44454c45474154455f4f525f41444d494e",
                              "id": 4930,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "129781:26:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2ab65104b299cabcfcfc9f3a1190cc0e945461d1bd6f46f741f56428db390259",
                                "typeString": "literal_string \"SL:NOT_DELEGATE_OR_ADMIN\""
                              },
                              "value": "SL:NOT_DELEGATE_OR_ADMIN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2ab65104b299cabcfcfc9f3a1190cc0e945461d1bd6f46f741f56428db390259",
                                "typeString": "literal_string \"SL:NOT_DELEGATE_OR_ADMIN\""
                              }
                            ],
                            "id": 4913,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "129693:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "129693:115:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4932,
                        "nodeType": "ExpressionStatement",
                        "src": "129693:115:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4910,
                    "nodeType": "StructuredDocumentation",
                    "src": "129534:87:0",
                    "text": "@dev Checks that `msg.sender` is the Pool Delegate or a Pool Admin."
                  },
                  "id": 4934,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidPoolDelegateOrPoolAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4911,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129666:2:0"
                  },
                  "returnParameters": {
                    "id": 4912,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129683:0:0"
                  },
                  "scope": 5009,
                  "src": "129626:189:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4950,
                    "nodeType": "Block",
                    "src": "129943:85:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 4946,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4939,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "129961:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4940,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "129961:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4942,
                                        "name": "pool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3967,
                                        "src": "129981:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 4941,
                                      "name": "IPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2866,
                                      "src": "129975:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IPool_$2866_$",
                                        "typeString": "type(contract IPool)"
                                      }
                                    },
                                    "id": 4943,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "129975:11:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IPool_$2866",
                                      "typeString": "contract IPool"
                                    }
                                  },
                                  "id": 4944,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "poolDelegate",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2552,
                                  "src": "129975:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                    "typeString": "function () pure external returns (address)"
                                  }
                                },
                                "id": 4945,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "129975:26:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "129961:40:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a4e4f545f44454c4547415445",
                              "id": 4947,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "130003:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6c4d82066e3ab07e22e8940970a7c3e25f951b32dd69d1c3f49592c698bfa111",
                                "typeString": "literal_string \"SL:NOT_DELEGATE\""
                              },
                              "value": "SL:NOT_DELEGATE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6c4d82066e3ab07e22e8940970a7c3e25f951b32dd69d1c3f49592c698bfa111",
                                "typeString": "literal_string \"SL:NOT_DELEGATE\""
                              }
                            ],
                            "id": 4938,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "129953:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4948,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "129953:68:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4949,
                        "nodeType": "ExpressionStatement",
                        "src": "129953:68:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4935,
                    "nodeType": "StructuredDocumentation",
                    "src": "129821:71:0",
                    "text": "@dev Checks that `msg.sender` is the Pool Delegate."
                  },
                  "id": 4951,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidPoolDelegate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4936,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129926:2:0"
                  },
                  "returnParameters": {
                    "id": 4937,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129943:0:0"
                  },
                  "scope": 5009,
                  "src": "129897:131:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4974,
                    "nodeType": "Block",
                    "src": "130160:151:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 4962,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 4958,
                                  "name": "openToPublic",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4000,
                                  "src": "130191:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 4959,
                                    "name": "allowed",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3985,
                                    "src": "130207:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                      "typeString": "mapping(address => bool)"
                                    }
                                  },
                                  "id": 4961,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 4960,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4954,
                                    "src": "130215:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "130207:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "130191:32:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 4969,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 4963,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4954,
                                  "src": "130227:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 4965,
                                          "name": "pool",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3967,
                                          "src": "130244:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 4964,
                                        "name": "IPool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2866,
                                        "src": "130238:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IPool_$2866_$",
                                          "typeString": "type(contract IPool)"
                                        }
                                      },
                                      "id": 4966,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "130238:11:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IPool_$2866",
                                        "typeString": "contract IPool"
                                      }
                                    },
                                    "id": 4967,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "poolDelegate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2552,
                                    "src": "130238:24:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                      "typeString": "function () pure external returns (address)"
                                    }
                                  },
                                  "id": 4968,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "130238:26:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "130227:37:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "130191:73:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a4e4f545f414c4c4f574544",
                              "id": 4971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "130278:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_687a653d2027a68ae74d2a3792e1e19169101341c7bec77192ed8f707755ab93",
                                "typeString": "literal_string \"SL:NOT_ALLOWED\""
                              },
                              "value": "SL:NOT_ALLOWED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_687a653d2027a68ae74d2a3792e1e19169101341c7bec77192ed8f707755ab93",
                                "typeString": "literal_string \"SL:NOT_ALLOWED\""
                              }
                            ],
                            "id": 4957,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "130170:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "130170:134:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4973,
                        "nodeType": "ExpressionStatement",
                        "src": "130170:134:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4952,
                    "nodeType": "StructuredDocumentation",
                    "src": "130034:70:0",
                    "text": "@dev Checks that `msg.sender` is allowed to stake."
                  },
                  "id": 4975,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4955,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4954,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4975,
                        "src": "130129:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4953,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "130129:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "130128:17:0"
                  },
                  "returnParameters": {
                    "id": 4956,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "130160:0:0"
                  },
                  "scope": 5009,
                  "src": "130109:202:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4993,
                    "nodeType": "Block",
                    "src": "130439:89:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "id": 4984,
                                              "name": "pool",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 3967,
                                              "src": "130489:4:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            ],
                                            "id": 4983,
                                            "name": "IPool",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2866,
                                            "src": "130483:5:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_IPool_$2866_$",
                                              "typeString": "type(contract IPool)"
                                            }
                                          },
                                          "id": 4985,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "130483:11:0",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IPool_$2866",
                                            "typeString": "contract IPool"
                                          }
                                        },
                                        "id": 4986,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "superFactory",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2576,
                                        "src": "130483:24:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                          "typeString": "function () pure external returns (address)"
                                        }
                                      },
                                      "id": 4987,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "130483:26:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 4982,
                                    "name": "IPoolFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2990,
                                    "src": "130470:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IPoolFactory_$2990_$",
                                      "typeString": "type(contract IPoolFactory)"
                                    }
                                  },
                                  "id": 4988,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "130470:40:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IPoolFactory_$2990",
                                    "typeString": "contract IPoolFactory"
                                  }
                                },
                                "id": 4989,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "globals",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2923,
                                "src": "130470:48:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IMapleGlobals_$2371_$",
                                  "typeString": "function () view external returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 4990,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "130470:50:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                                "typeString": "contract IMapleGlobals"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                                "typeString": "contract IMapleGlobals"
                              }
                            ],
                            "id": 4981,
                            "name": "IMapleGlobals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2371,
                            "src": "130456:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IMapleGlobals_$2371_$",
                              "typeString": "type(contract IMapleGlobals)"
                            }
                          },
                          "id": 4991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "130456:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "functionReturnParameters": 4980,
                        "id": 4992,
                        "nodeType": "Return",
                        "src": "130449:72:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4976,
                    "nodeType": "StructuredDocumentation",
                    "src": "130317:59:0",
                    "text": "@dev Returns the MapleGlobals instance."
                  },
                  "id": 4994,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_globals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4977,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "130398:2:0"
                  },
                  "returnParameters": {
                    "id": 4980,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4979,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4994,
                        "src": "130424:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4978,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2371,
                          "src": "130424:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "130423:15:0"
                  },
                  "scope": 5009,
                  "src": "130381:147:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5007,
                    "nodeType": "Block",
                    "src": "130662:73:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5003,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "130680:28:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 4999,
                                      "name": "_globals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4994,
                                      "src": "130681:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IMapleGlobals_$2371_$",
                                        "typeString": "function () view returns (contract IMapleGlobals)"
                                      }
                                    },
                                    "id": 5000,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "130681:10:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2371",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  "id": 5001,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "protocolPaused",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2070,
                                  "src": "130681:25:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                                    "typeString": "function () view external returns (bool)"
                                  }
                                },
                                "id": 5002,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "130681:27:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534c3a50524f544f5f504155534544",
                              "id": 5004,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "130710:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_1df75a541b1950ab7381e9394a1b3fe93ed26b36e574004e259dda42ec81eaa9",
                                "typeString": "literal_string \"SL:PROTO_PAUSED\""
                              },
                              "value": "SL:PROTO_PAUSED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_1df75a541b1950ab7381e9394a1b3fe93ed26b36e574004e259dda42ec81eaa9",
                                "typeString": "literal_string \"SL:PROTO_PAUSED\""
                              }
                            ],
                            "id": 4998,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "130672:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "130672:56:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5006,
                        "nodeType": "ExpressionStatement",
                        "src": "130672:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4995,
                    "nodeType": "StructuredDocumentation",
                    "src": "130534:75:0",
                    "text": "@dev Checks that the protocol is not in a paused state."
                  },
                  "id": 5008,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_whenProtocolNotPaused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4996,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "130645:2:0"
                  },
                  "returnParameters": {
                    "id": 4997,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "130662:0:0"
                  },
                  "scope": 5009,
                  "src": "130614:121:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 5010,
              "src": "118943:11795:0"
            }
          ],
          "src": "123:130616:0"
        },
        "id": 0
      }
    }
  }
}
