{
  "contractName": "LiquidityPoolV2Converter",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IPoolTokensContainer",
          "name": "_poolTokensContainer",
          "type": "address"
        },
        {
          "internalType": "contract IContractRegistry",
          "name": "_registry",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_maxConversionFee",
          "type": "uint32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "_type",
          "type": "uint16"
        },
        {
          "indexed": true,
          "internalType": "contract IConverterAnchor",
          "name": "_anchor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_activated",
          "type": "bool"
        }
      ],
      "name": "Activation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20Token",
          "name": "_fromToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20Token",
          "name": "_toToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_trader",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_return",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "_conversionFee",
          "type": "int256"
        }
      ],
      "name": "Conversion",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_prevFee",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_newFee",
          "type": "uint32"
        }
      ],
      "name": "ConversionFeeUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_provider",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newSupply",
          "type": "uint256"
        }
      ],
      "name": "LiquidityAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_provider",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newSupply",
          "type": "uint256"
        }
      ],
      "name": "LiquidityRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_prevFee",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_newFee",
          "type": "uint32"
        }
      ],
      "name": "OracleDeviationFeeUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_prevOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "OwnerUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20Token",
          "name": "_token1",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20Token",
          "name": "_token2",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rateN",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rateD",
          "type": "uint256"
        }
      ],
      "name": "TokenRateUpdate",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "acceptAnchorOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptTokenOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "anchor",
      "outputs": [
        {
          "internalType": "contract IConverterAnchor",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "connectorTokenCount",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "connectorTokens",
      "outputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "connectors",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "conversionFee",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "conversionWhitelist",
      "outputs": [
        {
          "internalType": "contract IWhitelist",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "conversionsEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_sourceToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Token",
          "name": "_targetToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_trader",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "convert",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "externalRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "n",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "d",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "externalRateUpdateTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_connectorToken",
          "type": "address"
        }
      ],
      "name": "getConnectorBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_sourceToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Token",
          "name": "_targetToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "getReturn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "hasETHReserve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isV28OrHigher",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxConversionFee",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxStakedBalanceEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxStakedBalances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "newOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "onlyOwnerCanUpdateRegistry",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracleDeviationFee",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "prevRegistry",
      "outputs": [
        {
          "internalType": "contract IContractRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "priceOracle",
      "outputs": [
        {
          "internalType": "contract IPriceOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "primaryReserveToken",
      "outputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IContractRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        }
      ],
      "name": "reserveBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reserveRatio",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reserveTokenCount",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "reserveTokens",
      "outputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        }
      ],
      "name": "reserveWeight",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "",
          "type": "address"
        }
      ],
      "name": "reserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "weight",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "deprecated1",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "deprecated2",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "isSet",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "restoreRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_onlyOwnerCanUpdateRegistry",
          "type": "bool"
        }
      ],
      "name": "restrictRegistryUpdate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "secondaryReserveToken",
      "outputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_conversionFee",
          "type": "uint32"
        }
      ],
      "name": "setConversionFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IWhitelist",
          "name": "_whitelist",
          "type": "address"
        }
      ],
      "name": "setConversionWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IConverterAnchor",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferAnchorOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferTokenOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "upgrade",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "withdrawETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawFromAnchor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [],
      "name": "converterType",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_primaryReserveToken",
          "type": "address"
        },
        {
          "internalType": "contract IChainlinkPriceOracle",
          "name": "_primaryReserveOracle",
          "type": "address"
        },
        {
          "internalType": "contract IChainlinkPriceOracle",
          "name": "_secondaryReserveOracle",
          "type": "address"
        }
      ],
      "name": "activate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_oracleDeviationFee",
          "type": "uint32"
        }
      ],
      "name": "setOracleDeviationFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        }
      ],
      "name": "reserveStakedBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        }
      ],
      "name": "reserveAmplifiedBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        }
      ],
      "name": "setReserveStakedBalance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_reserve1MaxStakedBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reserve2MaxStakedBalance",
          "type": "uint256"
        }
      ],
      "name": "setMaxStakedBalances",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "disableMaxStakedBalances",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        }
      ],
      "name": "poolToken",
      "outputs": [
        {
          "internalType": "contract ISmartToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISmartToken",
          "name": "_poolToken",
          "type": "address"
        }
      ],
      "name": "liquidationLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_weight",
          "type": "uint32"
        }
      ],
      "name": "addReserve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "effectiveTokensRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_sourceToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Token",
          "name": "_targetToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "targetAmountAndFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minReturn",
          "type": "uint256"
        }
      ],
      "name": "addLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISmartToken",
          "name": "_poolToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minReturn",
          "type": "uint256"
        }
      ],
      "name": "removeLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISmartToken",
          "name": "_poolToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "removeLiquidityReturnAndFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "effectiveReserveWeights",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolTokensContainer\",\"name\":\"_poolTokensContainer\",\"type\":\"address\"},{\"internalType\":\"contract IContractRegistry\",\"name\":\"_registry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_maxConversionFee\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"_type\",\"type\":\"uint16\"},{\"indexed\":true,\"internalType\":\"contract IConverterAnchor\",\"name\":\"_anchor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_activated\",\"type\":\"bool\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_fromToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_toToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_trader\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_return\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_conversionFee\",\"type\":\"int256\"}],\"name\":\"Conversion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_prevFee\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_newFee\",\"type\":\"uint32\"}],\"name\":\"ConversionFeeUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newSupply\",\"type\":\"uint256\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newSupply\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_prevFee\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_newFee\",\"type\":\"uint32\"}],\"name\":\"OracleDeviationFeeUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_prevOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"OwnerUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_token1\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_token2\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rateN\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rateD\",\"type\":\"uint256\"}],\"name\":\"TokenRateUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptAnchorOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptTokenOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_primaryReserveToken\",\"type\":\"address\"},{\"internalType\":\"contract IChainlinkPriceOracle\",\"name\":\"_primaryReserveOracle\",\"type\":\"address\"},{\"internalType\":\"contract IChainlinkPriceOracle\",\"name\":\"_secondaryReserveOracle\",\"type\":\"address\"}],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minReturn\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_weight\",\"type\":\"uint32\"}],\"name\":\"addReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anchor\",\"outputs\":[{\"internalType\":\"contract IConverterAnchor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"connectorTokenCount\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"connectorTokens\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"connectors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionFee\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionWhitelist\",\"outputs\":[{\"internalType\":\"contract IWhitelist\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionsEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_trader\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"convert\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"converterType\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableMaxStakedBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"effectiveReserveWeights\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"effectiveTokensRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"externalRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"externalRateUpdateTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_connectorToken\",\"type\":\"address\"}],\"name\":\"getConnectorBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"getReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hasETHReserve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isV28OrHigher\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISmartToken\",\"name\":\"_poolToken\",\"type\":\"address\"}],\"name\":\"liquidationLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxConversionFee\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxStakedBalanceEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"maxStakedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onlyOwnerCanUpdateRegistry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracleDeviationFee\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"poolToken\",\"outputs\":[{\"internalType\":\"contract ISmartToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prevRegistry\",\"outputs\":[{\"internalType\":\"contract IContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceOracle\",\"outputs\":[{\"internalType\":\"contract IPriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"primaryReserveToken\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"contract IContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISmartToken\",\"name\":\"_poolToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minReturn\",\"type\":\"uint256\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISmartToken\",\"name\":\"_poolToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityReturnAndFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"reserveAmplifiedBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"reserveBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"reserveStakedBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveTokenCount\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"reserveTokens\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"reserveWeight\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"reserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"weight\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"deprecated1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"deprecated2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"restoreRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_onlyOwnerCanUpdateRegistry\",\"type\":\"bool\"}],\"name\":\"restrictRegistryUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"secondaryReserveToken\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_conversionFee\",\"type\":\"uint32\"}],\"name\":\"setConversionFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IWhitelist\",\"name\":\"_whitelist\",\"type\":\"address\"}],\"name\":\"setConversionWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_reserve1MaxStakedBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserve2MaxStakedBalance\",\"type\":\"uint256\"}],\"name\":\"setMaxStakedBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_oracleDeviationFee\",\"type\":\"uint32\"}],\"name\":\"setOracleDeviationFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_balance\",\"type\":\"uint256\"}],\"name\":\"setReserveStakedBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"targetAmountAndFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IConverterAnchor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferAnchorOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferTokenOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFromAnchor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"Liquidity Pool v2 Converter The liquidity pool v2 converter is a specialized version of a converter that uses price oracles to rebalance the reserve weights in such a way that the primary token balance always strives to match the staked balance. This type of liquidity pool always has 2 reserves and the reserve weights are dynamic.\",\"events\":{\"OracleDeviationFeeUpdate(uint32,uint32)\":{\"details\":\"triggered when the oracle deviation fee is updated\",\"params\":{\"_newFee\":\"new fee percentage, represented in ppm\",\"_prevFee\":\"previous fee percentage, represented in ppm\"}}},\"kind\":\"dev\",\"methods\":{\"acceptAnchorOwnership()\":{\"details\":\"accepts ownership of the anchor after an ownership transfer also activates the converter can only be called by the contract owner note that prior to version 28, you should use 'acceptTokenOwnership' instead\"},\"acceptOwnership()\":{\"details\":\"used by a new owner to accept an ownership transfer\"},\"acceptTokenOwnership()\":{\"details\":\"deprecated, backward compatibility\"},\"activate(address,address,address)\":{\"details\":\"sets the pool's primary reserve token / price oracles and activates the pool each oracle must be able to provide the rate for each reserve token note that the oracle must be whitelisted prior to the call can only be called by the owner while the pool is inactive\",\"params\":{\"_primaryReserveOracle\":\"address of a chainlink price oracle for the primary reserve token\",\"_primaryReserveToken\":\"address of the pool's primary reserve token\",\"_secondaryReserveOracle\":\"address of a chainlink price oracle for the secondary reserve token\"}},\"addLiquidity(address,uint256,uint256)\":{\"details\":\"increases the pool's liquidity and mints new shares in the pool to the caller\",\"params\":{\"_amount\":\"amount of liquidity to add\",\"_minReturn\":\"minimum return-amount of pool tokens\",\"_reserveToken\":\"address of the reserve token to add liquidity to\"},\"returns\":{\"_0\":\"amount of pool tokens minted\"}},\"addReserve(address,uint32)\":{\"details\":\"defines a new reserve token for the converter can only be called by the owner while the converter is inactive and 2 reserves aren't defined yet\",\"params\":{\"_token\":\"address of the reserve token\",\"_weight\":\"reserve weight, represented in ppm, 1-1000000\"}},\"connectorTokenCount()\":{\"details\":\"deprecated, backward compatibility\"},\"connectorTokens(uint256)\":{\"details\":\"deprecated, backward compatibility\"},\"connectors(address)\":{\"details\":\"deprecated, backward compatibility\"},\"constructor\":{\"details\":\"initializes a new LiquidityPoolV2Converter instance\",\"params\":{\"_maxConversionFee\":\"maximum conversion fee, represented in ppm\",\"_poolTokensContainer\":\"pool tokens container governed by the converter\",\"_registry\":\"address of a contract registry contract\"}},\"convert(address,address,uint256,address,address)\":{\"details\":\"converts a specific amount of source tokens to target tokens can only be called by the bancor network contract\",\"params\":{\"_amount\":\"amount of tokens to convert (in units of the source token)\",\"_beneficiary\":\"wallet to receive the conversion result\",\"_sourceToken\":\"source ERC20 token\",\"_targetToken\":\"target ERC20 token\",\"_trader\":\"address of the caller who executed the conversion\"},\"returns\":{\"_0\":\"amount of tokens received (in units of the target token)\"}},\"converterType()\":{\"details\":\"returns the converter type\",\"returns\":{\"_0\":\"see the converter types in the the main contract doc\"}},\"disableMaxStakedBalances()\":{\"details\":\"disables the max staked balance mechanism available as a temporary mechanism during the beta once disabled, it cannot be re-enabled can only be called by the owner\"},\"effectiveReserveWeights()\":{\"details\":\"returns the effective reserve tokens weights\",\"returns\":{\"_0\":\"reserve1 weight\",\"_1\":\"reserve2 weight\"}},\"effectiveTokensRate()\":{\"details\":\"returns the effective rate of 1 primary token in secondary tokens\",\"returns\":{\"_0\":\"rate of 1 primary token in secondary tokens (numerator)\",\"_1\":\"rate of 1 primary token in secondary tokens (denominator)\"}},\"getConnectorBalance(address)\":{\"details\":\"deprecated, backward compatibility\"},\"getReturn(address,address,uint256)\":{\"details\":\"deprecated, backward compatibility\"},\"hasETHReserve()\":{\"details\":\"checks whether or not the converter has an ETH reserve\",\"returns\":{\"_0\":\"true if the converter has an ETH reserve, false otherwise\"}},\"isActive()\":{\"details\":\"returns true if the converter is active, false otherwise\",\"returns\":{\"_0\":\"true if the converter is active, false otherwise\"}},\"isV28OrHigher()\":{\"details\":\"checks whether or not the converter version is 28 or higher\",\"returns\":{\"_0\":\"true, since the converter version is 28 or higher\"}},\"liquidationLimit(address)\":{\"details\":\"returns the maximum number of pool tokens that can currently be liquidated\",\"params\":{\"_poolToken\":\"address of the pool token\"},\"returns\":{\"_0\":\"liquidation limit\"}},\"poolToken(address)\":{\"details\":\"returns the pool token address by the reserve token address\",\"params\":{\"_reserveToken\":\"reserve token address\"},\"returns\":{\"_0\":\"pool token address\"}},\"removeLiquidity(address,uint256,uint256)\":{\"details\":\"decreases the pool's liquidity and burns the caller's shares in the pool\",\"params\":{\"_amount\":\"amount of pool tokens to burn\",\"_minReturn\":\"minimum return-amount of reserve tokens\",\"_poolToken\":\"address of the pool token\"},\"returns\":{\"_0\":\"amount of liquidity removed\"}},\"removeLiquidityReturnAndFee(address,uint256)\":{\"details\":\"calculates the amount of reserve tokens entitled for a given amount of pool tokens note that a fee is applied according to the equilibrium level of the primary reserve token\",\"params\":{\"_amount\":\"amount of pool tokens\",\"_poolToken\":\"address of the pool token\"},\"returns\":{\"_0\":\"amount after fee and fee, in reserve token units\"}},\"reserveAmplifiedBalance(address)\":{\"details\":\"returns the amplified balance of a given reserve token\",\"params\":{\"_reserveToken\":\"reserve token address\"},\"returns\":{\"_0\":\"amplified balance\"}},\"reserveBalance(address)\":{\"details\":\"returns the reserve's balance note that prior to version 17, you should use 'getConnectorBalance' instead\",\"params\":{\"_reserveToken\":\"reserve token contract address\"},\"returns\":{\"_0\":\"reserve balance\"}},\"reserveStakedBalance(address)\":{\"details\":\"returns the staked balance of a given reserve token\",\"params\":{\"_reserveToken\":\"reserve token address\"},\"returns\":{\"_0\":\"staked balance\"}},\"reserveTokenCount()\":{\"details\":\"returns the number of reserve tokens defined note that prior to version 17, you should use 'connectorTokenCount' instead\",\"returns\":{\"_0\":\"number of reserve tokens\"}},\"reserveWeight(address)\":{\"details\":\"returns the reserve's weight added in version 28\",\"params\":{\"_reserveToken\":\"reserve token contract address\"},\"returns\":{\"_0\":\"reserve weight\"}},\"restoreRegistry()\":{\"details\":\"restores the previous contract-registry\"},\"restrictRegistryUpdate(bool)\":{\"details\":\"restricts the permission to update the contract-registry\",\"params\":{\"_onlyOwnerCanUpdateRegistry\":\"indicates whether or not permission is restricted to owner only\"}},\"setConversionFee(uint32)\":{\"details\":\"updates the current conversion fee can only be called by the contract owner\",\"params\":{\"_conversionFee\":\"new conversion fee, represented in ppm\"}},\"setConversionWhitelist(address)\":{\"details\":\"allows the owner to update & enable the conversion whitelist contract address when set, only addresses that are whitelisted are actually allowed to use the converter note that the whitelist check is actually done by the BancorNetwork contract\",\"params\":{\"_whitelist\":\"address of a whitelist contract\"}},\"setMaxStakedBalances(uint256,uint256)\":{\"details\":\"sets the max staked balance for both reserves available as a temporary mechanism during the beta can only be called by the owner\",\"params\":{\"_reserve1MaxStakedBalance\":\"max staked balance for reserve 1\",\"_reserve2MaxStakedBalance\":\"max staked balance for reserve 2\"}},\"setOracleDeviationFee(uint32)\":{\"details\":\"updates the current oracle deviation fee can only be called by the contract owner\",\"params\":{\"_oracleDeviationFee\":\"new oracle deviation fee, represented in ppm\"}},\"setReserveStakedBalance(address,uint256)\":{\"details\":\"sets the reserve's staked balance can only be called by the upgrader contract while the upgrader is the owner\",\"params\":{\"_balance\":\"new reserve staked balance\",\"_reserveToken\":\"reserve token address\"}},\"targetAmountAndFee(address,address,uint256)\":{\"details\":\"returns the expected target amount of converting one reserve to another along with the fee\",\"params\":{\"_amount\":\"amount of tokens received from the user\",\"_sourceToken\":\"contract address of the source reserve token\",\"_targetToken\":\"contract address of the target reserve token\"},\"returns\":{\"_0\":\"expected target amount\",\"_1\":\"expected fee\"}},\"token()\":{\"details\":\"deprecated since version 28, backward compatibility - use only for earlier versions\"},\"transferAnchorOwnership(address)\":{\"details\":\"transfers the anchor ownership the new owner needs to accept the transfer can only be called by the converter upgrder while the upgrader is the owner note that prior to version 28, you should use 'transferAnchorOwnership' instead\",\"params\":{\"_newOwner\":\"new token owner\"}},\"transferOwnership(address)\":{\"details\":\"allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner\",\"params\":{\"_newOwner\":\"new contract owner\"}},\"transferTokenOwnership(address)\":{\"details\":\"deprecated, backward compatibility\"},\"updateRegistry()\":{\"details\":\"updates to the new contract-registry\"},\"upgrade()\":{\"details\":\"upgrades the converter to the latest version can only be called by the owner note that the owner needs to call acceptOwnership on the new converter after the upgrade\"},\"withdrawETH(address)\":{\"details\":\"withdraws ether can only be called by the owner if the converter is inactive or by upgrader contract can only be called after the upgrader contract has accepted the ownership of this contract can only be called if the converter has an ETH reserve\",\"params\":{\"_to\":\"address to send the ETH to\"}},\"withdrawFromAnchor(address,address,uint256)\":{\"details\":\"withdraws tokens held by the anchor and sends them to an account can only be called by the owner\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"account to receive the new amount\",\"_token\":\"ERC20 token contract address\"}},\"withdrawTokens(address,address,uint256)\":{\"details\":\"withdraws tokens held by the converter and sends them to an account can only be called by the owner note that reserve tokens can only be withdrawn by the owner while the converter is inactive unless the owner is the converter upgrader contract\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"account to receive the new amount\",\"_token\":\"ERC20 token contract address\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/LiquidityPoolV2Converter.sol\":\"LiquidityPoolV2Converter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/bancorx/interfaces/IBancorX.sol\":{\"keccak256\":\"0x65b5780d710159c7540078c38406c53db37a349fb468a0bf21bdc6262e497951\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://3df931a12770d10a22451326e38ae9d405d3e2716bdbdd6306b5e2361f6fe511\",\"dweb:/ipfs/QmcRBSaFLz516dAEqb8ZEiyx8ZTHZZ6rfxHn5roL2fHA3S\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol\":{\"keccak256\":\"0x242211f471f27635fa98bdeed238429942c55fc9a5e824c1a30cd88fad727f9b\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://f9769299a5e13c363d102c4c08b09e3a87ec053124dcc157be0a6448c13e3320\",\"dweb:/ipfs/QmUC2CaAr6emVkJN62xXBY83r1f7Hxj62UAavZsCSWcqUb\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/LiquidityPoolConverter.sol\":{\"keccak256\":\"0x075a4ba13d871f8f55da9889651f875a1f7537b2c8ea7ad330499d148345fc17\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://34f5ed00855a9737349919242b0c7f1d531ad4e7caf3c9e5c14583c743224eaa\",\"dweb:/ipfs/QmRjiQLCLCEkrkXFmaYRtu597ezB42mHCmdN2RkF876ibE\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IBancorFormula.sol\":{\"keccak256\":\"0xf30c95034af4c4ec6e8a859e90cf7a0bada29a805ede76e04644107a7c677c4e\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b48070d4abf9c4a08c39e6c494fa9efd7389aa7f8b61b283c9ba02062b1c59b6\",\"dweb:/ipfs/Qme6U7SpspFPzMH2mTyKsXCnJEAgg1vX6NNFzuykbVSY5R\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverter.sol\":{\"keccak256\":\"0x18b0d73a3d5ee951ede1b3f840ed35b40570e34975703079a4451555f4dd089b\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://1cd7263f1ef60793e3929509150420037df9a1194c3d0f40bb2ff5516d6a373f\",\"dweb:/ipfs/QmNUbsZt2rzWPjStYycgz3vMbNP4VrAqZPRAK39QNqUoos\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterAnchor.sol\":{\"keccak256\":\"0x9448cdbe90293fb5c1a0808b77af8754a1025b59c45f432eee01f659361a6115\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://1ef2bb2e1543c9324daf7f3fd086a57efb45b89f3d62b9d7a9fc78c138d24dbc\",\"dweb:/ipfs/QmVcXDib3K6xYJMBNxawmo4krJGiDfxb5oL64Lc3pi14XK\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterFactory.sol\":{\"keccak256\":\"0x40a8b6a5dd24f48b0c51c9f784c2e5df5afbadad9459873c25163f13f68c99dd\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://6ad87f96e9e812869d79396d3415f89fabd1f068861f1c5c92bac09898938070\",\"dweb:/ipfs/QmaHUVyRsjUrQNtWnRhSnfPXMbwnFgpNwZvL9BMC5Xxagb\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterUpgrader.sol\":{\"keccak256\":\"0x456faf61358bfd76498892509cc99f9729f310c9450e28b0d03b5e7cd9752802\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://01f7b3f24cc895a948ea44f8e067d312b55ef1e9cf491908f3fb948d02b914da\",\"dweb:/ipfs/QmfSwZrWFWmT8xeX3iwSq75Vs8pQaQBGkmxJEHehUiPP1N\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/ITypedConverterCustomFactory.sol\":{\"keccak256\":\"0xe9e91f22d45e1c39dd441bed511d5fa6acffe83910f42ea7abcfd300f59daaaf\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://621881bd2a74632b697d87e4c3253142f8758364122240d5cc18826b18bfef80\",\"dweb:/ipfs/QmcTPevgXAYM7Li4r3rKn8uqRF2hWpid2uNBwymysYjLWp\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/LiquidityPoolV2Converter.sol\":{\"keccak256\":\"0xdd6e82cc0945131084abe0d5103cdf91326706658de33a94fd8fe3ff7b6b59b9\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://53573685ad522fd72fea8f7ec09181fef4c48a12ce9366813500c5f1c1aa7155\",\"dweb:/ipfs/Qmdy3PpQy7rnAHpMScnWWaitDtvMDvXCf51wVzMW1R1hLu\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/LiquidityPoolV2ConverterCustomFactory.sol\":{\"keccak256\":\"0x7fc843e5f1b0de5cc1248b4f12396a2dc42fc089f4af0b20ddb222cfca096f92\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://2f042d21817d6cabc0296f90ed45730353ff1a057c797104518b3a33dc01261b\",\"dweb:/ipfs/QmNgXdNtY1f2Ggg8PbB1MZVS9am8YAmPdj5fD7LFvApqC4\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/PoolTokensContainer.sol\":{\"keccak256\":\"0x79e583ec380c8982f74d4f707ae26ed96e1c90a6b54b4fc058ab2316656e0ddb\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://3c900b396fefda767db8b99d9ed10c9a22151279b0f8229098d28a08e75046da\",\"dweb:/ipfs/QmZBqgB1CnKpjM8Bv6HMrYtzdwu8wBmS3FzpWuvhyfGLwd\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/interfaces/IPoolTokensContainer.sol\":{\"keccak256\":\"0xb62b1efbd3188a2ef15fef6122f45278e1c354cadb2544cb600af28bda00f3cd\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://ce08db6aafa20ced1fbaed11d4413580901f525bb318c23dff7532c815b03e1e\",\"dweb:/ipfs/QmeoC4D4vJiPMW7TjTmtu3z8WAtBDQ4GNSTeJzZsDzA36c\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/ERC20Token.sol\":{\"keccak256\":\"0xf64a993754bb4afcdfda9e8fe377c2c8a198f23b39e954f5ee3f9f2825958ebd\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9ee0b7fd792a589b8321f1f13686fe5d5ae949288b124c1a57e2ad895c87e915\",\"dweb:/ipfs/QmTCRx2G6rJAhX9FyYkV4Gx69owVDYSkjNGNFrJGQ7Xnik\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/SmartToken.sol\":{\"keccak256\":\"0xf5036eb68eef5c9e8c8065c359e4a6f360a1ff1371129dc6a01ebcab29f4c034\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://99f904a959fa0c1237afc6e02342300be0e5eb2d9d96e9f8cd29dd2c52d1837b\",\"dweb:/ipfs/QmNxF79PB1fDsWDpCurH97mRVMgm56jACjf2KNj8syw4DG\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IERC20Token.sol\":{\"keccak256\":\"0xe6f988c3156e88258474526a541d5a42b6a9adae98b04177a059d9f723bc82cd\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9a6eb77a5b9ce70995a11a6e48ac3985a4c70896fe5fe04d46146ad7c1c83ea3\",\"dweb:/ipfs/QmYvGSveZFG51tghwkVuu6eK9Jy8frHpfLxHTMyvNZN461\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IEtherToken.sol\":{\"keccak256\":\"0x6ed324da616d70af0b21fa073b1e5329b430e38b470177633a69710eff3da893\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://44f94aa59c67de636423cbdef82efb7d8e0562e73dfc9049a48054156aebaf14\",\"dweb:/ipfs/Qmdn8KAP54s7X3J6TCoZPhCpS19aCQzFYZuFABugJ5JA5D\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/ISmartToken.sol\":{\"keccak256\":\"0x5cfc15e7a23a9872059b0cea4d2ae902c3fc074a39e1c645036ce38ad47881ec\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://890ee09d24de5778e34c4c27d1377d83d378e8f4a13fcb94d5102f61d4749cce\",\"dweb:/ipfs/QmT89f61fmsUN1BVdebKxUc5VU7sitiP33LNk7TTtF18oj\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol\":{\"keccak256\":\"0x74caf88eff1cb113ad8277df9ba7933a6f1e0deea8fd1855157def3be833b859\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://c7793c9f245736cd8413bc8c4b5c40b67949cbee32289a16d29c83cf59396ad6\",\"dweb:/ipfs/QmWony7b1buUrGnE32gjLAnSwkBYMrJ68vUcCwDMmp3MbJ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Owned.sol\":{\"keccak256\":\"0x6ef69d9dcc80a8a36d5eb37783375cd5e4831c6d20c723fa6f6b6a06c0aeb53d\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://5a5d087e2c5b47739615ef22e1f29749de44b43c9a37cfae32b3dfc498a258c4\",\"dweb:/ipfs/Qmd1mXKEQbmBxqHk326LGVzNoayXsam8gZNecknnYpBnyh\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/PriceOracle.sol\":{\"keccak256\":\"0x5d03fb3ec2ef50006712ad6fd47d14aed49c4d57971e8d918618093f690e6170\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://8dae9bd9a95911008b10d316a1efaa6f05224bf37dec02ace44ef5a303aff3ee\",\"dweb:/ipfs/Qmeuv2c6R2KwFWganFF7US5s5TcYm1toGM2o4XkS1zGx4R\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ReentrancyGuard.sol\":{\"keccak256\":\"0x5ea87c10dd6e7e79212da712eb5f079c03361e6c96e299a4ffd9aaee8d6a3899\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://882aac64a791df35a942480e6ce611d1acb399af4ac0c4ef0288965c3785bf50\",\"dweb:/ipfs/QmeWeYYFh5HZAzJ1SzPHoTcPvZrE4NPUVfmjvH9Q3m36Gg\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol\":{\"keccak256\":\"0x1ab7391a19ca8a3ad2f3c4a1074e080d4d76dfdb834637bdd0c1e6b6acdf28af\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://d6d8c99621ca884b72da2d84eddfec8ec8c5533915691d6eec94a07adf445608\",\"dweb:/ipfs/QmaXr6DN7VbfxfMn3PsTy7SAMgZVVXbdeaw11BsAjVL2x1\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHandler.sol\":{\"keccak256\":\"0xf65b87e3bf3343e368da67878c19d1a043a1025b10e9053d3562b53b4aa447fe\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b85c5d96642c14c53b8d5062eecd4d27d3bdb457d1d0f130900763a75a512eb7\",\"dweb:/ipfs/QmUHtbqC1khqnRZXYn11Aykus4m5e9MVNUWqorxhpr5ipJ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHolder.sol\":{\"keccak256\":\"0xac6bc102eff6c1bb8c1bb4466eab50322c7c101e2e33d577dd3035f106627577\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9fdbda2d4509260ca3dd43654bdaea07ef18a5e04213ff16e38e3b4abad78a5f\",\"dweb:/ipfs/QmPb69rzX1DwDeEhhfzqQNS3U2bfGcFjXNaV5ffHsZHzfP\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Types.sol\":{\"keccak256\":\"0x1616bdc4668c6396eb8e302177249284a5406dc1dfa3c9ab2e83f6c3c180be36\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://f4feb67f11147068d227366f8a13e4261ad1f927f0fd01d1e1764479ab2df8f5\",\"dweb:/ipfs/QmYV4TdmbL8pyeRi2w5ofUzTK3CEiwUZepia5JcuFgxb4x\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol\":{\"keccak256\":\"0x073efa69fcd6b5e60f841b28b366d63b62ff48ab12a06ce3f5a7f41afd6ce885\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://e8b8ecb2d29197ca77f0ed98f728ace54e6edcfdf5cd1194ae22701607eaf608\",\"dweb:/ipfs/QmcsR6Q35Hurh3TrPkYAboicz9bQQoGCWmZLzUCDyhotH8\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IChainlinkPriceOracle.sol\":{\"keccak256\":\"0x544a1d335c9a30e5543f5c069bbd9f73e6478b0a6941481619a0d20eea159c2a\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://8649d3ff5e21bf5ff21d45a62193974e08ccec27b392e91cbfdad479a60e87f0\",\"dweb:/ipfs/QmatS5peisTv9PdqVz9eSuveQdhJBqpxfpr5q4YsMv51CZ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IContractRegistry.sol\":{\"keccak256\":\"0x3551889a83738b621c29ed66f1ecb6a843cca4217e54c9357198559b9cc92259\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://231a59c8f2665adeda8c7e6930832409c9b991fd27ad84b3a24335e7bf269bbe\",\"dweb:/ipfs/QmeJJbn1EAUbZenruTEdJAnwUn3dxsVNeJvxPe81qKEGqL\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IOwned.sol\":{\"keccak256\":\"0xc60a9d197abc28c1906ed4d18b59caa0242db754a0e1f67af6e6277593530dae\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://a8c6f3e6525a81a5165ccbf04f73f6c389c14b74135d11a7b5f70b1c9bdac75c\",\"dweb:/ipfs/QmaPu4Z7yUPc9sMADmoTZVY6AnyDSYHtNNCx3mm4VkJwhP\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x39f4f7af694f7f24373901d8edd57245c6e59970cd1b35137ded4bbebe2155bb\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://30d1011854960be9ab326844d4d97324084955593b2903bee969aba6b1b5f8e9\",\"dweb:/ipfs/QmeTQNZRDNrboKD3ikyMj3tNVHGsa1GqBuAXytJAhhK5Az\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/ITokenHolder.sol\":{\"keccak256\":\"0x9ccb8ab04d0bd874ba7aae5277e60f35c36918922649a0596bf3664ed257bfe2\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b65e6db19cd244c9f3545695de5fd7573711c49fb306631ddbf0e1d2fa9fb589\",\"dweb:/ipfs/QmZeu5KYVMTbTx7h2BVUq52fpwL9Q44AUfzeVksucDohgf\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IWhitelist.sol\":{\"keccak256\":\"0x356ad553ceeaea04d7cb8f0d6a5663c47dfccb2bd82517348128f032416ee34a\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9ea3bbb9945144ead2c1392351f2f9f7444af78569f2b95da2e68bb6b919db52\",\"dweb:/ipfs/QmPyUAk44Kj7nJB4tzYqeSXWHyYP51mRNynEmWra9m4eKS\"]}},\"version\":1}",
  "bytecode": "[encoded data, 39536 characters]",
  "deployedBytecode": "[encoded data, 38488 characters]",
  "immutableReferences": {},
  "sourceMap": "741:31911:28:-:0;;;349:27:60;;;-1:-1:-1;;;;349:27:60;;;2899:30:8;;;-1:-1:-1;;3292:40:8;;;1938:42:28;;;-1:-1:-1;;1938:42:28;-1:-1:-1;1938:42:28;-1:-1:-1;;1989:40:28;;;;;2732:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2732:214:28;;;;;;;;;;;619:5:58;:18;;-1:-1:-1;;;;;;619:18:58;627:10;619:18;;;2732:214:28;;;;;;;;;;;594:23:65;2732:214:28;594:13:65;:23::i;:::-;-1:-1:-1;2122:8:57::1;:39:::0;;-1:-1:-1;;;;;2122:39:57;;;::::1;-1:-1:-1::0;;;;;;2122:39:57;;::::1;::::0;::::1;::::0;;;2172:12:::1;:43:::0;;;;::::1;;::::0;;6069:7:8;594:23:65;6069:7:8;594:13:65;:23::i;:::-;6168:17:8;7294:35:::2;6168:17:::0;7294:19:::2;:35::i;:::-;-1:-1:-1::0;;6203:6:8::3;:16:::0;;-1:-1:-1;;;;;;6203:16:8::3;-1:-1:-1::0;;;;;6203:16:8;;;::::3;::::0;;;::::3;::::0;;;-1:-1:-1;6230:16:8::3;:36:::0;;-1:-1:-1;;6230:36:8::3;::::0;::::3;::::0;;::::3;::::0;;;::::3;::::0;;;::::3;::::0;;-1:-1:-1;741:31911:28;;-1:-1:-1;;;;;741:31911:28;692:128:65;-1:-1:-1;;;;;766:22:65;;758:54;;;;;-1:-1:-1;;;758:54:65;;;;;;;;;;;;-1:-1:-1;;;758:54:65;;;;;;;;;;;;;;;692:128;:::o;7404:156:8:-;1846:7;7489:32;;;;;7481:71;;;;;-1:-1:-1;;;7481:71:8;;;;;;;;;;;;;;;;;;;;;;;;;;;741:31911:28;;;;;;;",
  "deployedSourceMap": "741:31911:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;8454:29:8;:8;:29;;:35;;-1:-1:-1;;;8454:35:8;;;;8446:67;;;;;-1:-1:-1;;;8446:67:8;;;;;;;;;;;;-1:-1:-1;;;8446:67:8;;;;;;;;;;;;;;;741:31911:28;;;;;7900:211;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7900:211:28;-1:-1:-1;;;;;7900:211:28;;:::i;:::-;;;;;;;;;;;;;;;;3655:224:57;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3655:224:57;;;;:::i;1029:38:28:-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1029:38:28;;;;;;;;;;;;;;1938:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2899:30:8;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22514:248;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22514:248:8;-1:-1:-1;;;;;22514:248:8;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4504:2671:28;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4504:2671:28;;;;;;;;;;;;;;;;;;;:::i;17176:113:8:-;;;;;;;;;;;;;:::i;9912:103:28:-;;;;;;;;;;;;;:::i;22836:145:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22836:145:8;;:::i;16300:204::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16300:204:8;-1:-1:-1;;;;;16300:204:8;;:::i;23471:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23471:208:8;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22136:130;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22136:130:8;-1:-1:-1;;;;;22136:130:8;;:::i;3729:136:28:-;;;;;;;;;;;;;:::i;931:31::-;;;;;;;;;;;;;:::i;8312:216::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8312:216:28;-1:-1:-1;;;;;8312:216:28;;:::i;10586:610::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10586:610:28;-1:-1:-1;;;;;10586:610:28;;:::i;1333:38:57:-;;;;;;;;;;;;;:::i;1989:40:28:-;;;;;;;;;;;;;:::i;22340:100:8:-;;;;;;;;;;;;;:::i;12220:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12220:157:8;;;;;;;;;;;;;;;;;:::i;3468:90:28:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9409:273;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9409:273:28;;;;;;;:::i;2300:925:57:-;;;;;;;;;;;;;:::i;10268:202:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10268:202:8;-1:-1:-1;;;;;10268:202:8;;:::i;2343:35::-;;;;;;;;;;;;;:::i;18573:3356:28:-;;;;;;;;;;;;;;;;-1:-1:-1;18573:3356:28;;-1:-1:-1;;;;;18573:3356:28;;;;;;;;;;;:::i;10223:141::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10223:141:28;-1:-1:-1;;;;;10223:141:28;;:::i;3292:40:8:-;;;;;;;;;;;;;:::i;13330:735::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13330:735:8;;;;;;;;;;;;;;;;;:::i;1243:37:57:-;;;;;;;;;;;;;:::i;11112:198:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11112:198:8;-1:-1:-1;;;;;11112:198:8;;:::i;24923:800:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24923:800:28;;-1:-1:-1;;;;;24923:800:28;;;;;;:::i;9086:554:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9086:554:8;-1:-1:-1;;;;;9086:554:8;;:::i;11531:272:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11531:272:28;;-1:-1:-1;;;;;11531:272:28;;;;;;;;:::i;23055:114:8:-;;;;;;;;;;;;;:::i;1422:217:58:-;;;;;;;;;;;;;:::i;1154:33:57:-;;;;;;;;;;;;;:::i;219:29:58:-;;;;;;;;;;;;;:::i;3041:43:8:-;;;;;;;;;;;;;:::i;1874:57:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1874:57:28;-1:-1:-1;;;;;1874:57:28;;:::i;14882:112:8:-;;;;;;;;;;;;;:::i;1603:28:28:-;;;;;;;;;;;;;:::i;13271:1585::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13271:1585:28;;;;;;;;;;;;;;;;;:::i;3304:137:57:-;;;;;;;;;;;;;:::i;3417:46:8:-;;;;;;;;;;;;;:::i;8810:248:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8810:248:28;;-1:-1:-1;;;;;8810:248:28;;;;;;:::i;2473:46:8:-;;;;;;;;;;;;;:::i;2501:239:13:-;;;;;;;;;;;;;:::i;2613:34:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2613:34:8;;:::i;9815:82::-;;;;;;;;;;;;;:::i;2387:39::-;;;;;;;;;;;;;:::i;255:23:58:-;;;;;;;;;;;;;:::i;14288:374:8:-;;;;;;;;;;;;;:::i;2754:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2754:48:8;-1:-1:-1;;;;;2754:48:8;;:::i;23243:154::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23243:154:8;-1:-1:-1;;;;;23243:154:8;;:::i;12065:168:28:-;;;;;;;;;;;;;:::i;1133:40::-;;;;;;;;;;;;;:::i;16773:225:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16773:225:8;-1:-1:-1;;;;;16773:225:8;;:::i;7395:309:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7395:309:28;;;;:::i;22287:2224::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22287:2224:28;;-1:-1:-1;;;;;22287:2224:28;;;;;;;;;;;:::i;17872:782:8:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17872:782:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12392:444:28:-;;;;;;;;;;;;;:::i;12580:274:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12580:274:8;;;;:::i;1164:167:58:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1164:167:58;-1:-1:-1;;;;;1164:167:58;;:::i;21965:97:8:-;;;;;;;;;;;;;:::i;1704:37:28:-;;;;;;;;;;;;;:::i;7900:211::-;8042:7;8009:13;6959:23:8;6973:8;6959:13;:23::i;:::-;-1:-1:-1;;;;;;;8074:29:28::1;;::::0;;;:14:::1;:29;::::0;;;;;;7900:211::o;3655:224:57:-;726:12:58;:10;:12::i;:::-;3815:26:57::1;:56:::0;;;::::1;;-1:-1:-1::0;;;3815:56:57::1;-1:-1:-1::0;;;;3815:56:57;;::::1;::::0;;;::::1;::::0;;3655:224::o;1029:38:28:-;;;-1:-1:-1;;;;;1029:38:28;;:::o;1938:42::-;;;;;;:::o;2899:30:8:-;;;;;;:::o;22514:248::-;22586:7;22595:6;22603:4;22609;22615;22632:22;;:::i;:::-;-1:-1:-1;;;;;;;;;22657:18:8;;;;;;;;:8;:18;;;;;;;;22632:43;;-1:-1:-1;22632:43:8;;;;;;;;;-1:-1:-1;22632:43:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22632:43:8;;;;;;;;;;;;;;;;;-1:-1:-1;22657:18:8;;-1:-1:-1;22657:18:8;;22632:43;22514:248::o;4504:2671:28:-;6615:11:8;:9;:11::i;:::-;726:12:58::1;:10;:12::i;:::-;4751:20:28::2;6959:23:8;6973:8;6959:13;:23::i;:::-;4798:21:28::3;948:18:65;957:8;948;:18::i;:::-;4847:23:28::4;948:18:65;957:8;948;:18::i;:::-;4903:21:28::5;594:23:65;608:8;594:13;:23::i;:::-;4957::28::6;594::65;608:8;594:13;:23::i;:::-;5045:6:28::7;::::0;;:14:::7;::::0;;-1:-1:-1;;;5045:14:28;;;;5071:4:::7;::::0;-1:-1:-1;;;;;5045:6:28;;::::7;::::0;-1:-1:-1;;5045:14:28;;::::7;::::0;::::7;::::0;;;;;;;;:6;:14;::::7;;::::0;::::7;;;;::::0;::::7;;;;;;;;;;;;::::0;::::7;;;;;;;;;;;;;;;;;;;::::0;::::7;;-1:-1:-1::0;5045:14:28;-1:-1:-1;;;;;5045:31:28::7;;5037:64;;;::::0;;-1:-1:-1;;;5037:64:28;;::::7;;::::0;::::7;::::0;::::7;::::0;;;;-1:-1:-1;;;5037:64:28;;;;;;;;;;;;;::::7;;5143:26;5183:37;5193:26;5183:9;:37::i;:::-;5240:61;::::0;;-1:-1:-1;;;5240:61:28;;-1:-1:-1;;;;;5240:61:28;;::::7;;::::0;::::7;::::0;;;5143:78;;-1:-1:-1;5240:29:28;;::::7;::::0;::::7;::::0;:61;;;;;::::7;::::0;;;;;;;;;:29;:61;::::7;;::::0;::::7;;;;::::0;::::7;;;;;;;;;;;;::::0;::::7;;;;;;;;;;;;;;;;;;;::::0;::::7;;-1:-1:-1::0;5240:61:28;:145;::::7;;;-1:-1:-1::0;5322:63:28::7;::::0;;-1:-1:-1;;;5322:63:28;;-1:-1:-1;;;;;5322:63:28;;::::7;;::::0;::::7;::::0;;;:29;;::::7;::::0;::::7;::::0;:63;;;;;::::7;::::0;;;;;;;;;:29;:63;::::7;;::::0;::::7;;;;::::0;::::7;;;;;;;;;;;;::::0;::::7;;;;;;;;;;;;;;;;;;;::::0;::::7;;-1:-1:-1::0;5322:63:28;5240:145:::7;5232:176;;;::::0;;-1:-1:-1;;;5232:176:28;;::::7;;::::0;::::7;::::0;::::7;::::0;;;;-1:-1:-1;;;5232:176:28;;;;;;;;;;;;;::::7;;5496:18;:16;:18::i;:::-;5583:19;:42:::0;;-1:-1:-1;;;;;;5583:42:28::7;-1:-1:-1::0;;;;;5583:42:28;::::7;;::::0;;5664:13:::7;:16:::0;;-1:-1:-1;;5664:16:28::7;;;;;::::0;;;::::7;::::0;;;::::7;::::0;-1:-1:-1;;;;;5640:40:28;;::::7;5664:16:::0;::::7;5640:40;5636:168;;;5719:13;5733:1;5719:16;;;;;;;;;::::0;;;::::7;::::0;;;::::7;::::0;5695:21:::7;:40:::0;;-1:-1:-1;;;;;;5695:40:28::7;-1:-1:-1::0;;;;;5719:16:28;;::::7;5695:40:::0;;;::::7;::::0;;5636:168:::7;;;5788:13;5802:1;5788:16;;;;;;;;;::::0;;;::::7;::::0;;;::::7;::::0;5764:21:::7;:40:::0;;-1:-1:-1;;;;;;5764:40:28::7;-1:-1:-1::0;;;;;5788:16:28;;::::7;5764:40:::0;;;::::7;::::0;;5636:168:::7;5892:51;6023:28;-1:-1:-1::0;;;6023:9:28::7;:28::i;:::-;-1:-1:-1::0;;;;;6005:63:28::7;;6069:15;:13;:15::i;:::-;6005:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::7;;;;;;;;;;;;::::0;::::7;;;;;;;;;;;;;;;;;;;::::0;::::7;;-1:-1:-1::0;6005:80:28;6193:21:::7;::::0;6112:177:::7;::::0;;-1:-1:-1;;;6112:177:28;;-1:-1:-1;;;;;6112:177:28;;::::7;;::::0;::::7;::::0;6193:21;;::::7;6112:177:::0;;;;;;::::7;::::0;;;;;;::::7;::::0;;;;;;6005:80;;-1:-1:-1;6112:31:28;;::::7;::::0;::::7;::::0;:177;;;;;6005:80:::7;::::0;6112:177;;;;;;;;-1:-1:-1;6112:31:28;:177;::::7;;::::0;::::7;;;;::::0;::::7;;;;;;;;;;;;::::0;::::7;;;;;;;;;;;;;;;;;;;::::0;::::7;;-1:-1:-1::0;6112:177:28;6098:11:::7;:191:::0;;-1:-1:-1;;;;;6098:191:28;;::::7;-1:-1:-1::0;;;6098:191:28::7;::::0;;;::::7;::::0;;;::::7;::::0;;6317:22:::7;:20;:22::i;:::-;6302:37:::0;;:12:::7;:37:::0;::::7;;::::0;;;6375:6:::7;:4;:6::i;:::-;6350:22;:31:::0;6568:19:::7;::::0;6509:35:::7;::::0;6547:41:::7;::::0;-1:-1:-1;;;;;6568:19:28::7;6547:20;:41::i;:::-;6646:19;::::0;6509:79;;-1:-1:-1;6599:29:28::7;::::0;6631:35:::7;::::0;-1:-1:-1;;;;;6646:19:28::7;6631:14;:35::i;:::-;6726:21;::::0;6599:67;;-1:-1:-1;6677:31:28::7;::::0;6711:37:::7;::::0;-1:-1:-1;;;;;6726:21:28::7;6711:14;:37::i;:::-;6677:71;;6796:21;6765:27;:52;6761:348;;;6868:1;6838:27;:31;:62;;;;6899:1;6873:23;:27;6838:62;6834:114;;;6921:11;:9;:11::i;:::-;6761:348;;;7008:1;6978:27;:31;:60;;;;;7037:1;7013:21;:25;6978:60;:91;;;;;7068:1;7042:23;:27;6978:91;6974:135;;;7086:11;:9;:11::i;:::-;7154:6;::::0;7162:4:::7;::::0;-1:-1:-1;;;;;7154:6:28::7;7137:15;:13;:15::i;:::-;7126:41;;;;;;;;;;;;628:1:65;;;;;::::6;977::::5;::::4;6993::8::3;749::58::2;4504:2671:28::0;;;:::o;17176:113:8:-;-1:-1:-1;;;;;;;;;;;;17246:29:8;:8;:29;;:35;;-1:-1:-1;;;17246:35:8;;;;;17176:113::o;9912:103:28:-;726:12:58;:10;:12::i;:::-;9976:23:28::1;:31:::0;;-1:-1:-1;;9976:31:28::1;::::0;;9912:103::o;22836:145:8:-;22907:11;22938:27;22966:6;22938:35;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22938:35:8;;;-1:-1:-1;;22836:145:8:o;16300:204::-;16435:6;16402:13;6959:23;6973:8;6959:13;:23::i;:::-;-1:-1:-1;;;;;;;16466:23:8::1;;::::0;;;:8:::1;:23;::::0;;;;-1:-1:-1;16466:30:8::1;::::0;::::1;;::::0;16300:204::o;23471:208::-;23580:7;23589;23616:55;23635:12;23649;23663:7;23616:18;:55::i;:::-;23609:62;;;;23471:208;;;;;;:::o;22136:130::-;726:12:58;:10;:12::i;:::-;22224:34:8::1;22248:9;22224:23;:34::i;:::-;22136:130:::0;:::o;3729:136:28:-;3779:4;3803:16;:14;:16::i;:::-;:54;;;;-1:-1:-1;3831:11:28;;-1:-1:-1;;;3831:11:28;;-1:-1:-1;;;;;3831:11:28;3823:34;;3803:54;3796:61;;3729:136;:::o;931:31::-;;;-1:-1:-1;;;931:31:28;;-1:-1:-1;;;;;931:31:28;;:::o;8312:216::-;8457:7;8424:13;6959:23:8;6973:8;6959:13;:23::i;:::-;8489:31:28::1;8506:13;8489:16;:31::i;:::-;8482:38:::0;8312:216;-1:-1:-1;;;8312:216:28:o;10586:610::-;10657:7;10715:23;10741:10;-1:-1:-1;;;;;10741:22:28;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10741:24:28;-1:-1:-1;;;;;10903:32:28;;;10876:24;10903:32;;;:20;10741:24;10903:32;;;;;10741:24;;-1:-1:-1;10903:32:28;;;10964:28;10903:32;10964:14;:28::i;:::-;-1:-1:-1;;;;;11027:28:28;;11003:21;11027:28;;;:14;:28;;;;;;10946:46;;-1:-1:-1;11141:47:28;11027:28;11141;10946:46;11153:15;11141:11;:28::i;:::-;:32;;:47::i;:::-;11134:54;10586:610;-1:-1:-1;;;;;;10586:610:28:o;1333:38:57:-;;;-1:-1:-1;;;1333:38:57;;;;;:::o;1989:40:28:-;;;;;;;;;:::o;22340:100:8:-;726:12:58;:10;:12::i;:::-;22409:23:8::1;:21;:23::i;:::-;22340:100::o:0;12220:157::-;726:12:58;:10;:12::i;:::-;12326:6:8::1;::::0;;:43:::1;::::0;;-1:-1:-1;;;12326:43:8;;-1:-1:-1;;;;;12326:43:8;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;;;:6;;;::::1;::::0;:21:::1;::::0;:43;;;;;-1:-1:-1;;12326:43:8;;;;;;;;-1:-1:-1;12326:6:8;:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12220:157:::0;;;:::o;3468:90:28:-;3549:1;3468:90;:::o;9409:273::-;726:12:58;:10;:12::i;:::-;9575:25:28::1;9537:17;:35;9555:13;9569:1;9555:16;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;9555:16:28::1;9537:35:::0;;;::::1;::::0;;;;;;;;:63;;;;9629:13:::1;:16:::0;;9649:25;;9611:17:::1;::::0;9555:16;;-1:-1:-1;;9629:16:28;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;9629:16:28::1;9611:35:::0;;;::::1;::::0;;;;;;;;:63;-1:-1:-1;;9409:273:28:o;2300:925:57:-;2417:5;;-1:-1:-1;;;;;2417:5:57;2403:10;:19;;:50;;-1:-1:-1;2427:26:57;;-1:-1:-1;;;2427:26:57;;;;2426:27;2403:50;2395:80;;;;;-1:-1:-1;;;2395:80:57;;;;;;;;;;;;-1:-1:-1;;;2395:80:57;;;;;;;;;;;;;;;2530:29;2580:28;-1:-1:-1;;;2580:9:57;:28::i;:::-;2721:8;;2530:79;;-1:-1:-1;;;;;;2706:23:57;;;2721:8;;2706:23;;;;:61;;-1:-1:-1;;;;;;2733:34:57;;;;2706:61;2698:94;;;;;-1:-1:-1;;;2698:94:57;;;;;;;;;;;;-1:-1:-1;;;2698:94:57;;;;;;;;;;;;;;;2907:40;;;-1:-1:-1;;;2907:40:57;;-1:-1:-1;;;2907:40:57;;;;;;2959:1;;-1:-1:-1;;;;;2907:21:57;;;;;:40;;;;;;;;;;;;;;;:21;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2907:40:57;-1:-1:-1;;;;;2907:54:57;;;2899:87;;;;;-1:-1:-1;;;2899:87:57;;;;;;;;;;;;-1:-1:-1;;;2899:87:57;;;;;;;;;;;;;;;3093:8;;;3078:12;:23;;-1:-1:-1;;;;;3093:8:57;;;-1:-1:-1;;;;;;3078:23:57;;;;;;;3195:22;;;;;;;;;;;2300:925::o;10268:202:8:-;726:12:58;:10;:12::i;:::-;10401:10:8::1;948:18:65;957:8;948;:18::i;:::-;-1:-1:-1::0;10430:19:8::2;:32:::0;;-1:-1:-1;;;;;;10430:32:8::2;-1:-1:-1::0;;;;;10430:32:8;;;::::2;::::0;;;::::2;::::0;;10268:202::o;2343:35::-;2376:2;2343:35;:::o;18573:3356:28:-;18853:7;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;6356:9:8::1;:7;:9::i;:::-;18749:13:28::2;6959:23:8;6973:8;6959:13;:23::i;:::-;18789:7:28::3;252:24:65;269:6;252:16;:24::i;:::-;18823:10:28::4;252:24:65;269:6;252:16;:24::i;:::-;-1:-1:-1::0;;;;;;;;18988:36:28;::::5;::::0;-1:-1:-1;;;;;;;;;18988:36:28::5;:76;;19050:9;:14:::0;18988:76:::5;;;19040:7;19027:9;:20;18988:76;18980:112;;;::::0;;-1:-1:-1;;;18980:112:28;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;-1:-1:-1;;;18980:112:28;;;;;;;;;;;;;::::5;;19156:21;:19;:21::i;:::-;-1:-1:-1::0;;;;;;;;19300:36:28;::::5;::::0;-1:-1:-1;;;;;;;;;19300:36:28::5;19296:161;;;-1:-1:-1::0;;;;;;;;;;;19393:29:28::5;::::0;:8:::5;:29;::::0;;:37;:52:::5;::::0;19435:9:::5;19393:41;:52::i;:::-;-1:-1:-1::0;;;;;;;;;;;19353:29:28::5;::::0;:8:::5;:29;::::0;;:92;19296:161:::5;-1:-1:-1::0;;;;;19577:29:28;::::5;19546:28;19577:29:::0;;;:14:::5;:29;::::0;;;;;19720:23:::5;::::0;::::5;;19716:209;;;-1:-1:-1::0;;;;;19768:32:28;::::5;;::::0;;;:17:::5;:32;::::0;;;;;:37;;:110:::5;;-1:-1:-1::0;;;;;;19846:32:28;::::5;;::::0;;;:17:::5;:32;::::0;;;;;19809:33:::5;:20:::0;19834:7;19809:24:::5;:33::i;:::-;:69;;19768:110;19760:153;;;::::0;;-1:-1:-1;;;19760:153:28;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;::::5;::::0;;;;;;;;;;;;;::::5;;-1:-1:-1::0;;;;;20042:35:28;;::::5;20011:28;20042:35:::0;;;:20:::5;:35;::::0;;;;;;;;20114:30;;-1:-1:-1;;;20114:30:28;;;;20042:35;::::5;::::0;;;-1:-1:-1;;20114:30:28::5;::::0;;::::5;::::0;;;;;;;20042:35;20114:30;::::5;;::::0;::::5;;;;::::0;::::5;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;;;;;;;;::::0;::::5;;-1:-1:-1::0;20114:30:28;-1:-1:-1;;;20114:30:28;;-1:-1:-1;;;;;;20239:36:28;::::5;::::0;-1:-1:-1;;;;;;;;20239:36:28::5;20235:122;;20290:67;20307:13;20322:10;20342:4;20349:7;20290:16;:67::i;:::-;-1:-1:-1::0;;;;;20458:23:28;::::5;;::::0;;;:8:::5;:23;::::0;;;;:31;:44:::5;::::0;20494:7;20458:35:::5;:44::i;:::-;-1:-1:-1::0;;;;;20424:23:28;::::5;;::::0;;;:8:::5;:23;::::0;;;;:78;20545:33:::5;:20:::0;20570:7;20545:24:::5;:33::i;:::-;-1:-1:-1::0;;;;;20513:29:28;::::5;;::::0;;;:14:::5;:29;::::0;;;;:65;;;;20840:25;;;:49:::5;;-1:-1:-1::0;20869:20:28;;20840:49:::5;20836:194;;;-1:-1:-1::0;20922:7:28;20836:194:::5;;;20976:54;21009:20:::0;20976:28:::5;:7:::0;20988:15;20976:11:::5;:28::i;:54::-;20958:72;;20836:194;21068:10;21049:15;:29;;21041:60;;;::::0;;-1:-1:-1;;;21041:60:28;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;-1:-1:-1;;;21041:60:28;;;;;;;;;;;;;::::5;;21190:6;::::0;;21161:89:::5;::::0;;-1:-1:-1;;;21161:89:28;;-1:-1:-1;;;;;21161:89:28;;::::5;::::0;;::::5;::::0;;;;21222:10:::5;21161:89:::0;;;;;;;;;;;;21190:6;;;::::5;::::0;21161:42:::5;::::0;:89;;;;;-1:-1:-1;;21161:89:28;;;;;;;;-1:-1:-1;21190:6:28;21161:89;::::5;;::::0;::::5;;;;::::0;::::5;;;;;;;;;;;;::::0;::::5;;;;;;;;;21312:11;:9;:11::i;:::-;-1:-1:-1::0;;;;;21389:123:28;::::5;21404:10;21389:123;21431:7:::0;21440:33:::5;:20:::0;21431:7;21440:24:::5;:33::i;:::-;21475:36;:15:::0;21495;21475:19:::5;:36::i;:::-;21389:123;::::0;;;;;::::5;::::0;::::5;::::0;;;;;;;;;;;;;;;;::::5;21589:103;21622:16:::0;21640:36:::5;:15:::0;21660;21640:19:::5;:36::i;:::-;21678:13;21589:32;:103::i;:::-;21764:70;21793:13;21807:1;21793:16;;;;;;;;;::::0;;;::::5;::::0;;;::::5;::::0;21811:13:::5;:16:::0;;-1:-1:-1;;;;;21793:16:28;;::::5;::::0;-1:-1:-1;;21811:16:28;::::5;;;;;;::::0;;;::::5;::::0;;::::5;::::0;-1:-1:-1;;;;;21811:16:28::5;::::0;;21764:28:::5;:70::i;:::-;639:6:60::0;:14;;-1:-1:-1;;;;639:14:60;;;21906:15:28;;-1:-1:-1;;;;;;;;;;18573:3356:28:o;10223:141::-;-1:-1:-1;;;;;10321:35:28;;;10290:11;10321:35;;;:20;:35;;;;;;;;10223:141::o;3292:40:8:-;;;-1:-1:-1;;;3292:40:8;;;;;:::o;13330:735::-;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;726:12:58::1;:10;:12::i;:::-;13517:25:8::2;13545:29;-1:-1:-1::0;;;13545:9:8::2;:29::i;:::-;-1:-1:-1::0;;;;;13765:16:8;::::2;;::::0;;;:8:::2;:16;::::0;;;;-1:-1:-1;13765:22:8::2;::::0;13517:57;;-1:-1:-1;;;;13765:22:8;::::2;;;13764:23;::::0;:38:::2;;;13792:10;:8;:10::i;:::-;13791:11;13764:38;:68;;;-1:-1:-1::0;13806:5:8::2;::::0;-1:-1:-1;;;;;13806:26:8;;::::2;:5:::0;::::2;:26;13764:68;13756:98;;;::::0;;-1:-1:-1;;;13756:98:8;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;13756:98:8;;;;;;;;;;;;;::::2;;13865:42;13886:6;13894:3;13899:7;13865:20;:42::i;:::-;-1:-1:-1::0;;;;;13994:16:8;::::2;;::::0;;;:8:::2;:16;::::0;;;;-1:-1:-1;13994:22:8::2;::::0;-1:-1:-1;;;13994:22:8;::::2;;;13990:67;;;14031:26;14050:6;14031:18;:26::i;:::-;-1:-1:-1::0;;639:6:60;:14;;-1:-1:-1;;;;639:14:60;;;-1:-1:-1;;13330:735:8:o;1243:37:57:-;;;-1:-1:-1;;;;;1243:37:57;;:::o;11112:198:8:-;726:12:58;:10;:12::i;:::-;-1:-1:-1;;;1627:20:57::1;-1:-1:-1::0;1627:5:57::1;:20::i;:::-;11267:6:8::2;::::0;;:35:::2;::::0;;-1:-1:-1;;;11267:35:8;;-1:-1:-1;;;;;11267:35:8;;::::2;::::0;;::::2;::::0;;;;;;:6;;;::::2;::::0;:24:::2;::::0;:35;;;;;:6:::2;::::0;:35;;;;;;;;:6;;:35;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;749:1:58::1;11112:198:8::0;:::o;24923:800:28:-;25022:7;25031;25051:19;25073:10;-1:-1:-1;;;;;25073:22:28;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25073:24:28;-1:-1:-1;;;;;25147:32:28;;;25108:21;25147:32;;;:20;25073:24;25147:32;;;;;;;;;;;25132:48;;:14;:48;;;;25073:24;;-1:-1:-1;25197:21:28;;;25193:487;;;25262:19;;-1:-1:-1;;;;;25262:19:28;25235:9;25247:35;;;:14;:35;;;;;;:61;;855:2;25247:39;:61::i;:::-;25352:19;;25235:73;;-1:-1:-1;25323:9:28;;25335:37;;-1:-1:-1;;;;;25352:19:28;25335:16;:37::i;:::-;25323:49;;25388:11;25401;25420:1;25416;:5;:23;;25434:1;25437;25416:23;;;25425:1;25428;25416:23;25387:52;;-1:-1:-1;25387:52:28;-1:-1:-1;25454:23:28;25480:43;25511:11;25480:26;:7;25492:13;25480:11;:26::i;:43::-;25454:69;-1:-1:-1;25538:22:28;25563:33;25592:3;25563:24;25454:69;25583:3;25563:19;:24::i;:33::-;25538:58;-1:-1:-1;;25635:32:28;;;;-1:-1:-1;25611:57:28;;-1:-1:-1;;;;;;25611:57:28;25193:487;25698:13;-1:-1:-1;25713:1:28;;-1:-1:-1;;24923:800:28;;;;;;:::o;9086:554:8:-;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;726:12:58::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;;;;;;;6959:23:8::2;6973:8;6959:13;:23::i;:::-;9259:25:::3;9287:29;-1:-1:-1::0;;;9287:9:8::3;:29::i;:::-;9259:57;;9431:10;:8;:10::i;:::-;9430:11;:41;;;-1:-1:-1::0;9445:5:8::3;::::0;-1:-1:-1;;;;;9445:26:8;;::::3;:5:::0;::::3;:26;9430:41;9422:71;;;::::0;;-1:-1:-1;;;9422:71:8;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;9422:71:8;;;;;;;;;;;;;::::3;;9504:35;::::0;-1:-1:-1;;;;;9504:12:8;::::3;::::0;9517:21:::3;9504:35:::0;::::3;;;::::0;::::3;::::0;;;9517:21;9504:12;:35;::::3;;;;;;;;;;;;;::::0;::::3;;;;;;9593:39;-1:-1:-1::0;;;;;;;;;;;9593:18:8::3;:39::i;:::-;-1:-1:-1::0;;639:6:60;:14;;-1:-1:-1;;;;639:14:60;;;-1:-1:-1;9086:554:8:o;11531:272:28:-;726:12:58;:10;:12::i;:::-;11720:1:28::1;11698:19;:17;:19::i;:::-;:23;;;11690:61;;;::::0;;-1:-1:-1;;;11690:61:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;11690:61:28;;;;;;;;;;;;;::::1;;11762:33;11779:6;11787:7;11762:16;:33::i;:::-;11531:272:::0;;:::o;23055:114:8:-;23116:6;23142:19;:17;:19::i;1422:217:58:-;1498:8;;-1:-1:-1;;;;;1498:8:58;1484:10;:22;1476:52;;;;;-1:-1:-1;;;1476:52:58;;;;;;;;;;;;-1:-1:-1;;;1476:52:58;;;;;;;;;;;;;;;1563:8;;;1556:5;;1544:28;;-1:-1:-1;;;;;1563:8:58;;;;1556:5;;;;1544:28;;;1591:8;;;;1583:16;;-1:-1:-1;;;;;1591:8:58;;-1:-1:-1;;;;;;1583:16:58;;;;;;;1610:21;;;1422:217::o;1154:33:57:-;;;-1:-1:-1;;;;;1154:33:57;;:::o;219:29:58:-;;;-1:-1:-1;;;;;219:29:58;;:::o;3041:43:8:-;;;;;;;;;:::o;1874:57:28:-;;;;;;;;;;;;;:::o;14882:112:8:-;14965:13;:20;14882:112;:::o;1603:28:28:-;;;;;;:::o;13271:1585::-;13522:7;13531;6356:9:8;:7;:9::i;:::-;13454:12:28::1;6959:23:8;6973:8;6959:13;:23::i;:::-;13490:12:28::2;6959:23:8;6973:8;6959:13;:23::i;:::-;-1:-1:-1::0;;;;;13591:28:28;;::::3;::::0;;::::3;;;13583:63;;;::::0;;-1:-1:-1;;;13583:63:28;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;13583:63:28;;;;;;;;;;;;;::::3;;13659:24;13694::::0;13876:6:::3;:4;:6::i;:::-;13850:22;;:32;13846:725;;;-1:-1:-1::0;;;;;;;13919:22:28;::::3;;::::0;;;:8:::3;:22;::::0;;;;-1:-1:-1;13919:29:28::3;::::0;::::3;;1846:7:8;13983:34:28::0;;::::3;13846:725;;;14059:20;;:::i;:::-;14082:22;:20;:22::i;:::-;14059:45;;14120:27;14149:29:::0;14182::::3;14206:4;14182:23;:29::i;:::-;14248:19;::::0;14119:92;;-1:-1:-1;14119:92:28;-1:-1:-1;;;;;;14232:35:28;;::::3;14248:19:::0;::::3;14232:35;14228:332;;;14308:20;14288:40;;14367:22;14347:42;;14228:332;;;14463:22;14443:42;;14524:20;14504:40;;14228:332;13846:725;;;;14678:20;14702:11:::0;14717:94:::3;14737:12;14751;14765:17;14784;14803:7;14717:19;:94::i;:::-;14677:134:::0;;;;-1:-1:-1;13271:1585:28;;-1:-1:-1;;;;;;;;;;;13271:1585:28:o;3304:137:57:-;726:12:58;:10;:12::i;:::-;3421::57::1;::::0;3410:8:::1;:23:::0;;-1:-1:-1;;;;;;3410:23:57::1;-1:-1:-1::0;;;;;3421:12:57;;::::1;3410:23:::0;;;::::1;::::0;;3304:137::o;3417:46:8:-;3459:4;3417:46;:::o;8810:248:28:-;726:12:58;:10;:12::i;:::-;-1:-1:-1;;;1627:20:57::1;-1:-1:-1::0;1627:5:57::1;:20::i;:::-;8979:13:28::2;6959:23:8;6973:8;6959:13;:23::i;:::-;-1:-1:-1::0;;;;;;;9010:29:28;;;::::3;;::::0;;;:14:::3;:29;::::0;;;;:40;8810:248::o;2473:46:8:-;;;-1:-1:-1;;;;;2473:46:8;;:::o;2501:239:13:-;2661:1;2639:19;:17;:19::i;:::-;:23;;;2631:61;;;;;-1:-1:-1;;;2631:61:13;;;;;;;;;;;;-1:-1:-1;;;2631:61:13;;;;;;;;;;;;;;;2703:29;:27;:29::i;2613:34:8:-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2613:34:8;;-1:-1:-1;2613:34:8;:::o;9815:82::-;9885:4;9815:82;:::o;2387:39::-;;;-1:-1:-1;;;;;2387:39:8;;:::o;255:23:58:-;;;-1:-1:-1;;;;;255:23:58;;:::o;14288:374:8:-;726:12:58;:10;:12::i;:::-;14335:36:8::1;14393:29;-1:-1:-1::0;;;14393:9:8::1;:29::i;:::-;14509:6;::::0;14335:88;;-1:-1:-1;14517:5:8::1;::::0;-1:-1:-1;;;;;14509:6:8::1;14492:15;:13;:15::i;:::-;14481:42;;;;;;;;;;;;14536:45;14562:17;14536;:45::i;:::-;14592:34;::::0;;-1:-1:-1;;;14592:34:8;;2376:2:::1;14592:34;::::0;::::1;::::0;;;-1:-1:-1;;;;;14592:25:8;::::1;::::0;::::1;::::0;:34;;;;;-1:-1:-1;;14592:34:8;;;;;;;-1:-1:-1;14592:25:8;:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14637:17;:15;:17::i;2754:48::-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2754:48:8;;;;;:::o;23243:154::-;23331:7;23358:31;23373:15;23358:14;:31::i;:::-;23351:38;23243:154;-1:-1:-1;;23243:154:8:o;12065:168:28:-;12117:7;12126;12146:20;;:::i;:::-;12169:22;:20;:22::i;:::-;12210:6;;12218;;;;;12210;;-1:-1:-1;12218:6:28;-1:-1:-1;;12065:168:28;;;:::o;1133:40::-;;;-1:-1:-1;;;;;1133:40:28;;:::o;16773:225:8:-;16927:7;16894:13;6959:23;6973:8;6959:13;:23::i;:::-;-1:-1:-1;;;;;;;16959:23:8::1;;::::0;;;:8:::1;:23;::::0;;;;:31;;16773:225::o;7395:309:28:-;726:12:58;:10;:12::i;:::-;1846:7:8::1;7490:37:28;::::0;::::1;;;7482:82;;;::::0;;-1:-1:-1;;;7482:82:28;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7605:18;::::0;7580:65:::1;::::0;;7605:18:::1;;::::0;;::::1;::::0;::::1;7580:65:::0;;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;7656:18;:40:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;7656:40:28;;::::1;::::0;;;::::1;::::0;;7395:309::o;22287:2224::-;22549:7;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;6356:9:8::1;:7;:9::i;:::-;22448:10:28::2;3055:25;3071:8;3055:15;:25::i;:::-;22485:7:::3;252:24:65;269:6;252:16;:24::i;:::-;22519:10:28::4;252:24:65;269:6;252:16;:24::i;:::-;22625:21:28::5;:19;:21::i;:::-;22732:25;22760:10;-1:-1:-1::0;;;;;22760:22:28::5;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;;;;;;;;::::0;::::5;;-1:-1:-1::0;22760:24:28;;-1:-1:-1;22874:21:28::5;22901:48;22929:10:::0;22941:7;22901:27:::5;:48::i;:::-;22873:76;;;22985:10;22968:13;:27;;22960:58;;;::::0;;-1:-1:-1;;;22960:58:28;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;-1:-1:-1;;;22960:58:28;;;;;;;;;;;;;::::5;;-1:-1:-1::0;;;;;23123:32:28;;::::5;23096:24;23123:32:::0;;;:20:::5;:32;::::0;;;;;;23239:6:::5;::::0;;23210:75;;-1:-1:-1;;;23210:75:28;;;;::::5;::::0;;;;23265:10:::5;23210:75:::0;;;;;;;;;;;;23123:32;;::::5;::::0;23239:6;;;::::5;::::0;23210:42:::5;::::0;:75;;;;;23096:24;;23210:75;;;;;;23096:24;23239:6;23210:75;::::5;;::::0;::::5;;;;::::0;::::5;;;;;;;;;;;;::::0;::::5;;;;;-1:-1:-1::0;;;;;;;;;23385:22:28;::::5;;::::0;;;:8:::5;:22;::::0;;;;:30;:49:::5;::::0;23420:13;23385:34:::5;:49::i;:::-;-1:-1:-1::0;;;;;23352:22:28;::::5;;::::0;;;:8:::5;:22;::::0;;;;;;;:82;;;;23472:14:::5;:28:::0;;;;;;:47:::5;::::0;23505:13;23472:32:::5;:47::i;:::-;-1:-1:-1::0;;;;;23530:28:28;::::5;;::::0;;;:14:::5;:28;::::0;;;;;;:47;;;;;-1:-1:-1;23530:28:28;;;;-1:-1:-1;23530:28:28;-1:-1:-1;;;;;23648:35:28::5;23644:170;;;23698:34;::::0;:10:::5;::::0;:34;::::5;;;::::0;23718:13;;23698:34:::5;::::0;;;23718:13;23698:10;:34;::::5;;;;;;;;;;;;;::::0;::::5;;;;;;23644:170;;;23761:53;23774:12;23788:10;23800:13;23761:12;:53::i;:::-;23876:11;:9;:11::i;:::-;23900:26;23929:30;:17:::0;23951:7;23929:21:::5;:30::i;:::-;24027:95;::::0;;;;;::::5;::::0;::::5;::::0;;;;;;;;;;;;;-1:-1:-1;;;;;;24027:95:28;::::5;::::0;24044:10:::5;::::0;24027:95:::5;::::0;;;;;;;;::::5;24199:78;24232:10;24244:18;24264:12;24199:32;:78::i;:::-;24349:70;24378:13;24392:1;24378:16;;;;;;;24349:70;-1:-1:-1::0;;639:6:60;:14;;-1:-1:-1;;;;639:14:60;;;-1:-1:-1;24490:13:28;;-1:-1:-1;;;;;;;;22287:2224:28:o;17872:782:8:-;18123:7;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;-1:-1:-1;;;1627:20:57::1;-1:-1:-1::0;1627:5:57::1;:20::i;:::-;-1:-1:-1::0;;;;;18183:28:8;;::::2;::::0;;::::2;;;18175:63;;;::::0;;-1:-1:-1;;;18175:63:8;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;18175:63:8;;;;;;;;;;;;;::::2;;18366:19;::::0;-1:-1:-1;;;;;18366:19:8::2;18358:42:::0;;:158:::2;;-1:-1:-1::0;18422:19:8::2;::::0;:42:::2;::::0;;-1:-1:-1;;;18422:42:8;;-1:-1:-1;;;;;18422:42:8;;::::2;;::::0;::::2;::::0;;;:19;;;::::2;::::0;-1:-1:-1;;18422:42:8;;;;;::::2;::::0;;;;;;;;:19;:42;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;18422:42:8;:93;::::2;;;-1:-1:-1::0;18468:19:8::2;::::0;:47:::2;::::0;;-1:-1:-1;;;18468:47:8;;-1:-1:-1;;;;;18468:47:8;;::::2;;::::0;::::2;::::0;;;:19;;;::::2;::::0;-1:-1:-1;;18468:47:8;;;;;::::2;::::0;;;;;;;;:19;:47;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;18468:47:8;18422:93:::2;18350:207;;;::::0;;-1:-1:-1;;;18350:207:8;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;18350:207:8;;;;;;;;;;;;;::::2;;18577:69;18587:12;18601;18615:7;18624;18633:12;18577:9;:69::i;:::-;639:6:60::0;:14;;-1:-1:-1;;;;639:14:60;;;18570:76:8;;-1:-1:-1;;;;;;;17872:782:8:o;12392:444:28:-;12448:7;12457;12477:20;;:::i;:::-;12500:22;:20;:22::i;:::-;12477:45;;12534:27;12563:29;12596;12620:4;12596:23;:29::i;:::-;12533:92;;;;12665:13;12679:1;12665:16;;;;;;;;;;;;;;;;;;12642:19;;-1:-1:-1;;;;;12665:16:28;;;12642:19;;:39;12638:125;;;12698:53;;;;;-1:-1:-1;12698:53:28;;-1:-1:-1;12698:53:28;;-1:-1:-1;12698:53:28;12638:125;12775:53;;;;;-1:-1:-1;12775:53:28;;-1:-1:-1;;12392:444:28;;:::o;12580:274:8:-;726:12:58;:10;:12::i;:::-;12692:16:8::1;::::0;::::1;::::0;;;::::1;::::0;::::1;12674:34:::0;;::::1;;;12666:73;;;::::0;;-1:-1:-1;;;12666:73:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12775:13;::::0;12755:50:::1;::::0;;-1:-1:-1;;;12775:13:8;;::::1;;::::0;;::::1;12755:50:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;12816:13;:30:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;12816:30:8::1;-1:-1:-1::0;;12816:30:8;;::::1;::::0;;;::::1;::::0;;12580:274::o;1164:167:58:-;726:12;:10;:12::i;:::-;1268:5:::1;::::0;-1:-1:-1;;;;;1255:18:58;;::::1;1268:5:::0;::::1;1255:18;;1247:45;;;::::0;;-1:-1:-1;;;1247:45:58;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;1247:45:58;;;;;;;;;;;;;::::1;;1303:8;:20:::0;;-1:-1:-1;;;;;;1303:20:58::1;-1:-1:-1::0;;;;;1303:20:58;;;::::1;::::0;;;::::1;::::0;;1164:167::o;21965:97:8:-;22048:6;;-1:-1:-1;;;;;22048:6:8;;21965:97::o;1704:37:28:-;;;;:::o;7057:134:8:-;-1:-1:-1;;;;;7135:18:8;;;;;;:8;:18;;;;;-1:-1:-1;7135:24:8;;-1:-1:-1;;;7135:24:8;;;;7127:56;;;;;-1:-1:-1;;;7127:56:8;;;;;;;;;;;;-1:-1:-1;;;7127:56:8;;;;;;;;;;;;;;813:104:58;882:5;;-1:-1:-1;;;;;882:5:58;868:10;:19;860:49;;;;;-1:-1:-1;;;860:49:58;;;;;;;;;;;;-1:-1:-1;;;860:49:58;;;;;;;;;;;;;;6701:88:8;6756:10;:8;:10::i;:::-;6755:11;6747:34;;;;;-1:-1:-1;;;6747:34:8;;;;;;;;;;;;-1:-1:-1;;;6747:34:8;;;;;;;;;;;;;;1041:126:65;1130:4;-1:-1:-1;;;;;1110:25:65;;;;1102:57;;;;;-1:-1:-1;;;1102:57:65;;;;;;;;;;;;-1:-1:-1;;;1102:57:65;;;;;;;;;;;;;;692:128;-1:-1:-1;;;;;766:22:65;;758:54;;;;;-1:-1:-1;;;758:54:65;;;;;;;;;;;;-1:-1:-1;;;758:54:65;;;;;;;;;;;;;;4077:133:57;4169:8;;:33;;;-1:-1:-1;;;4169:33:57;;;;;;;;;;-1:-1:-1;;;;;;;4169:8:57;;:18;;:33;;;;;;;;;;;;;;:8;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4169:33:57;;4077:133;-1:-1:-1;;4077:133:57:o;27794:815:28:-;27904:6;;;27957:22;;;-1:-1:-1;;;27957:22:28;;;;-1:-1:-1;;;;;27904:6:28;;;;27923:31;;27904:6;;27957:20;;:22;;;;27842:30;;27957:22;;;;;;;;27904:6;27957:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27957:22:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27957:22:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;27957:22:28;;;;;;-1:-1:-1;;28010:17:28;;28068:13;:20;27923:56;;-1:-1:-1;28010:22:28;;28068:20;-1:-1:-1;27990:17:28;;-1:-1:-1;28099:503:28;28123:12;28119:1;:16;28099:503;;;28157:28;28204:12;28200:181;;;28256:9;-1:-1:-1;;;;;28256:21:28;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28256:23:28;;-1:-1:-1;28200:181:28;;;28352:10;28363:1;28352:13;;;;;;;;;;;;;;28333:32;;28200:181;28502:16;28461:20;:38;28482:13;28496:1;28482:16;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28482:16:28;;;28461:38;;;;;;;;;;;;;;;:57;;-1:-1:-1;;;;;;28461:57:28;;;;;;;;;;;28574:13;:16;;28588:1;;28574:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28533:38:28;;;;;:20;:38;;;;;;;:57;;-1:-1:-1;;;;;;28533:57:28;28574:16;;;;28533:57;;;;;;-1:-1:-1;28137:3:28;28099:503;;;;27794:815;;;;:::o;28737:263::-;28791:15;;:::i;:::-;28864:11;;28887:19;;28908:21;;28864:66;;;-1:-1:-1;;;28864:66:28;;-1:-1:-1;;;;;28887:19:28;;;28864:66;;;;28908:21;;;28864:66;;;;;;-1:-1:-1;;;;;;;28864:11:28;;;;;:22;;:66;;;;;;;;;;;;:11;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28864:66:28;;;;;;;;28948:44;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28737:263:28;:::o;32564:85::-;32638:3;32564:85;:::o;29180:166::-;29301:37;;;;;;;;;29325:12;29301:37;;;;;;;;;;;:23;:37::i;:::-;29230:19;;-1:-1:-1;;;;;29230:19:28;;;29221:29;;;;:8;:29;;;;;;29268:21;;;;;29259:31;;;;-1:-1:-1;29259:38:28;;;29220:118;;;;;;-1:-1:-1;;29220:118:28;;;;;;;29221:36;;29220:118;;;;;;;;;;;;;;29180:166::o;10641:121:8:-;10723:6;;;:14;;;-1:-1:-1;;;10723:14:8;;;;10699:4;;10749;;-1:-1:-1;;;;;10723:6:8;;-1:-1:-1;;10723:14:8;;;;;;;;;;;:6;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10723:14:8;-1:-1:-1;;;;;10723:31:8;;;10641:121;-1:-1:-1;10641:121:8:o;29615:207:28:-;-1:-1:-1;;;;;29782:23:28;;29691:7;29782:23;;;:8;:23;;;;;;;;:31;29718:14;:29;;;;;;:96;;29782:31;29718:59;;29752:24;29718:33;:59::i;:::-;:63;;:96::i;1149:250:61:-;1209:7;1262;1258:34;;-1:-1:-1;1291:1:61;1284:8;;1258:34;1317:7;;;1322:2;1317;:7;:2;1343:6;;;;;:12;1335:37;;;;;-1:-1:-1;;;1335:37:61;;;;;;;;;;;;-1:-1:-1;;;1335:37:61;;;;;;;;;;;;;;1627:174;1687:7;1720:1;1715:2;:6;1707:37;;;;;-1:-1:-1;;;1707:37:61;;;;;;;;;;;;-1:-1:-1;;;1707:37:61;;;;;;;;;;;;;;;1755:9;1772:2;1767;:7;;;;;;;1627:174;-1:-1:-1;;;;1627:174:61:o;716:89:60:-;772:6;;-1:-1:-1;;;772:6:60;;;;771:7;763:34;;;;;-1:-1:-1;;;763:34:60;;;;;;;;;;;;-1:-1:-1;;;763:34:60;;;;;;;;;;;;;;6440:87:8;6492:10;:8;:10::i;:::-;6484:35;;;;;-1:-1:-1;;;6484:35:8;;;;;;;;;;;;-1:-1:-1;;;6484:35:8;;;;;;;;;;;;;;351:112:65;435:1;426:6;:10;418:37;;;;;-1:-1:-1;;;418:37:65;;;;;;;;;;;;-1:-1:-1;;;418:37:65;;;;;;;;;;;;;;20456:205:8;20530:13;:20;20507;20561:92;20585:12;20581:1;:16;20561:92;;;20617:36;20636:13;20650:1;20636:16;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20636:16:8;20617:18;:36::i;:::-;20599:3;;20561:92;;778:147:61;838:7;872:2;866;:8;;858:34;;;;;-1:-1:-1;;;858:34:61;;;;;;;;;;;;-1:-1:-1;;;858:34:61;;;;;;;;;;;;;;;-1:-1:-1;910:7:61;;;778:147::o;386:169::-;446:7;478;;;504;;;;496:32;;;;;-1:-1:-1;;;496:32:61;;;;;;;;;;;;-1:-1:-1;;;496:32:61;;;;;;;;;;;;;;2190:348:62;2355:71;;;-1:-1:-1;;;;;2355:71:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2355:71:62;-1:-1:-1;;;2355:71:62;;;2334:93;;;;-1:-1:-1;;2313:17:62;;2334:20;;;;2355:71;2334:93;;;2355:71;2334:93;;2355:71;2334:93;;;;;;;;;;-1:-1:-1;;2334:93:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2298:129;;;;2445:7;:57;;;;-1:-1:-1;2457:11:62;;:16;;:44;;;2488:4;2477:24;;;;;;;;;;;;;;;-1:-1:-1;2477:24:62;2457:44;2437:94;;;;;-1:-1:-1;;;2437:94:62;;;;;;;;;;;;;;;;;;;;;;;;;;;32258:242:28;-1:-1:-1;;;;;32401:91:28;;;32444:29;;;;:14;:29;;;;;;;;;;32401:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32258:242;;;:::o;31261:709::-;31443:21;31467:25;31484:7;31467:16;:25::i;:::-;31443:49;;31503:21;31527:25;31544:7;31527:16;:25::i;:::-;31503:49;-1:-1:-1;31608:18:28;;;31604:91;;-1:-1:-1;;;;;31659:17:28;;;;;;:8;:17;;;;;-1:-1:-1;31659:24:28;;;;;-1:-1:-1;31604:91:28;31751:18;;;31747:97;;31819:13;1846:7:8;31802:30:28;31786:46;;31747:97;-1:-1:-1;;;;;31861:101:28;;;;;;;31895:32;:13;:32;;;;;:17;:32;:::i;:::-;31929;:13;:32;;;;;:17;:32;:::i;:::-;31861:101;;;;;;;;;;;;;;;;;;;;;;31261:709;;;;;;:::o;1196:290:63:-;726:12:58;:10;:12::i;:::-;1370:6:63::1;594:23:65;608:8;594:13;:23::i;:::-;1401:3:63::2;594:23:65;608:8;594:13;:23::i;:::-;1423:3:63::3;948:18:65;957:8;948;:18::i;:::-;1444:34:63::4;1457:6;1465:3;1470:7;1444:12;:34::i;20061:322:8:-:0;20138:13;6959:23;6973:8;6959:13;:23::i;:::-;-1:-1:-1;;;;;;;;20168:36:8;::::1;::::0;-1:-1:-1;;;;;;;;;20168:36:8::1;20164:211;;;-1:-1:-1::0;;;;;20219:23:8;::::1;;::::0;;;:8:::1;:23;::::0;;;;20253:21:::1;20219:55:::0;;20164:211:::1;;;20337:38;::::0;;-1:-1:-1;;;20337:38:8;;20369:4:::1;20337:38;::::0;::::1;::::0;;;-1:-1:-1;;;;;20337:23:8;::::1;::::0;-1:-1:-1;;20337:38:8;;;;;::::1;::::0;;;;;;;;:23;:38;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20337:38:8;-1:-1:-1;;;;;20303:23:8;::::1;;::::0;;;:8:::1;20337:38;20303:23:::0;;;;:72;20061:322;;:::o;1722:139:57:-;1807:24;1817:13;1807:9;:24::i;:::-;-1:-1:-1;;;;;1793:38:57;:10;:38;1785:68;;;;;-1:-1:-1;;;1785:68:57;;;;;;;;;;;;-1:-1:-1;;;1785:68:57;;;;;;;;;;;;;;15286:803:8;726:12:58;:10;:12::i;:::-;6615:11:8::1;:9;:11::i;:::-;15460:6:::2;594:23:65;608:8;594:13;:23::i;:::-;15494:6:8::3;948:18:65;957:8;948;:18::i;:::-;15531:7:8::4;7656:28;7676:7;7656:19;:28::i;:::-;15618:6:::5;::::0;-1:-1:-1;;;;;15591:34:8;;::::5;15618:6:::0;::::5;15591:34;::::0;::::5;::::0;:61:::5;;-1:-1:-1::0;;;;;;15630:16:8;::::5;;::::0;;;:8:::5;:16;::::0;;;;-1:-1:-1;15630:22:8::5;::::0;-1:-1:-1;;;15630:22:8;::::5;;;15629:23;15591:61;15583:93;;;::::0;;-1:-1:-1;;;15583:93:8;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;-1:-1:-1;;;15583:93:8;;;;;;;;;;;;;::::5;;15723:12;::::0;::::5;::::0;;::::5;1846:7;15706:29;15695:40:::0;::::5;::::0;;::::5;;;15687:79;;;::::0;;-1:-1:-1;;;15687:79:8;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;::::5;::::0;;;;;;;;;;;;;::::5;;15785:32;:19;:17;:19::i;:::-;:32;;;15777:70;;;::::0;;-1:-1:-1;;;15777:70:8;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;-1:-1:-1;;;15777:70:8;;;;;;;;;;;;;::::5;;-1:-1:-1::0;;;;;;;;15889:16:8;;;::::5;15860:26;15889:16:::0;;;:8:::5;:16;::::0;;;;15916:22;;;-1:-1:-1;15949:17:8;;::::5;:27:::0;;-1:-1:-1;;15949:27:8::5;::::0;;::::5;-1:-1:-1::0;;15949:27:8;;::::5;;15987:23:::0;;;::::5;-1:-1:-1::0;;;15987:23:8::5;::::0;;;:16:::5;16021:26:::0;;;;::::5;::::0;;;;;;;;::::5;::::0;;-1:-1:-1;;;;;;16021:26:8::5;::::0;;::::5;::::0;;;16058:12:::5;:23:::0;;;;::::5;::::0;;::::5;::::0;;::::5;::::0;::::5;::::0;;;::::5;::::0;;15286:803::o;30126:703:28:-;30328:19;;-1:-1:-1;;;;;30328:19:28;30204:6;30313:35;;;:14;:35;;;;;;30204:6;;;;30313:35;30204:6;;30432:37;;:16;:37::i;:::-;30524:21;;30407:62;;-1:-1:-1;30480:24:28;;30507:39;;-1:-1:-1;;;;;30524:21:28;30507:16;:39::i;:::-;30480:66;-1:-1:-1;30613:25:28;-1:-1:-1;;;30613:9:28;:25::i;:::-;-1:-1:-1;;;;;30598:57:28;;30670:46;:20;855:2;30670:24;:46::i;:::-;30791:7;;30813;;;;30598:223;;;-1:-1:-1;30598:223:28;;;-1:-1:-1;;;;;;30598:223:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30598:223:28;;;;;;;;;-1:-1:-1;30598:223:28;-1:-1:-1;;;;30126:703:28;;;:::o;26457:1089::-;26694:7;26703;26712;26783:21;26807:30;26824:12;26807:16;:30::i;:::-;26783:54;;26848:21;26872:30;26889:12;26872:16;:30::i;:::-;26848:54;-1:-1:-1;26949:20:28;26987:25;-1:-1:-1;;;26987:9:28;:25::i;:::-;26972:211;;;-1:-1:-1;;;26972:211:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26972:66:28;;;;;;;:211;;;;;;;;;;;;;;;:66;:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26972:211:28;;-1:-1:-1;27196:19:28;27218:26;26972:211;27218:12;:26::i;:::-;27291:18;;27196:48;;-1:-1:-1;27255:16:28;;27274:73;;27196:48;;27274:56;;1846:7:8;;27274:36:28;;:12;;27291:18;;;27274:56;27291:18;;;;27274:16;:36;:::i;:73::-;27255:92;-1:-1:-1;27488:26:28;:12;27255:92;27488:16;:26::i;:::-;27480:58;27516:11;;-1:-1:-1;27516:11:28;-1:-1:-1;26457:1089:28;-1:-1:-1;;;;;;;;;26457:1089:28:o;11633:276:8:-;726:12:58;:10;:12::i;:::-;11803:1:8::1;11781:19;:17;:19::i;:::-;:23;;;11773:61;;;::::0;;-1:-1:-1;;;11773:61:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;11773:61:8;;;;;;;;;;;;;::::1;;11845:6;::::0;;:24:::1;::::0;;-1:-1:-1;;;11845:24:8;;;;-1:-1:-1;;;;;11845:6:8;;::::1;::::0;-1:-1:-1;;11845:24:8;;::::1;::::0;:6:::1;::::0;:24;;;;;;:6;;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11880:21;:19;:21::i;3155:168:28:-:0;-1:-1:-1;;;;;3243:30:28;;;3286:1;3243:30;;;:20;:30;;;;;;;3227:88;;;;;-1:-1:-1;;;3227:88:28;;;;;;;;;;;;-1:-1:-1;;;3227:88:28;;;;;;;;;;;;;;1485:312:62;1631:59;;;-1:-1:-1;;;;;1631:59:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1631:59:62;-1:-1:-1;;;1631:59:62;;;1610:81;;;;-1:-1:-1;;1589:17:62;;1610:20;;;;1631:59;1610:81;;;1631:59;1610:81;;1631:59;1610:81;;;;;;;;;;-1:-1:-1;;1610:81:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1574:117;;;;1709:7;:57;;;;-1:-1:-1;1721:11:62;;:16;;:44;;;1752:4;1741:24;;;;;;;;;;;;;;;-1:-1:-1;1741:24:62;1721:44;1701:89;;;;;-1:-1:-1;;;1701:89:62;;;;;;;;;;;;-1:-1:-1;;;1701:89:62;;;;;;;;;;;;;;15439:2741:28;15716:7;6356:9:8;:7;:9::i;:::-;15648:12:28::1;6959:23:8;6973:8;6959:13;:23::i;:::-;15684:12:28::2;6959:23:8;6973:8;6959:13;:23::i;:::-;15831:6:28::3;:4;:6::i;:::-;15806:22;;:31;15802:173;;;15879:6;:4;:6::i;:::-;15854:22;:31:::0;15915:22:::3;:20;:22::i;:::-;15900:37:::0;;:12:::3;:37:::0;::::3;;::::0;;;15952:11:::3;:9;:11::i;:::-;-1:-1:-1::0;;;;;16014:22:28;::::3;15987:24;16014:22:::0;;;:8:::3;:22;::::0;;;;-1:-1:-1;16014:29:28::3;::::0;::::3;;::::0;1846:7:8::3;16081:34:28::0;;::::3;::::0;15987:24;;16234:94:::3;16014:22:::0;16268:12;16014:29;16081:34;16320:7;16234:19:::3;:94::i;:::-;16176:152;;;;;;16409:6;16419:1;16409:11;;16401:46;;;::::0;;-1:-1:-1;;;16401:46:28;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;16401:46:28;;;;;;;;;;;;;::::3;;-1:-1:-1::0;;;;;;;;16527:35:28;::::3;::::0;-1:-1:-1;;;;;;;;;16527:35:28::3;16523:270;;;16598:7;16585:9;:20;16577:56;;;::::0;;-1:-1:-1;;;16577:56:28;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;16577:56:28;;;;;;;;;;;;;::::3;;16523:270;;;16670:9;:14:::0;:100;::::3;;;;16763:7;16688:71;16730:28;16745:12;16730:14;:28::i;:::-;16688:12;-1:-1:-1::0;;;;;16688:22:28::3;;16719:4;16688:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;16688:37:28::3;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;16688:37:28;;:41:::3;:71::i;:::-;:82;;16670:100;16662:131;;;::::0;;-1:-1:-1;;;16662:131:28;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;16662:131:28;;;;;;;;;;;;;::::3;;16844:32;16863:12;16844:18;:32::i;:::-;16920:40;16953:6;16920:28;16935:12;16920:14;:28::i;:::-;:32:::0;::::3;:40::i;:::-;-1:-1:-1::0;;;;;16887:22:28;::::3;;::::0;;;:8:::3;:22;::::0;;;;;;;:73;;;;17062:14:::3;:28:::0;;;;:45:::3;::::0;17095:11;17062:32:::3;:45::i;:::-;-1:-1:-1::0;;;;;17031:28:28;::::3;;::::0;;;:14:::3;:28;::::0;;;;;;:76;;;;:28;;;;-1:-1:-1;17031:28:28;-1:-1:-1;;;;;17194:35:28::3;17190:187;;;17246:29;::::0;-1:-1:-1;;;;;17246:21:28;::::3;::::0;:29:::3;::::0;::::3;;::::0;;;::::3;::::0;;;;:21;:29;::::3;;;;;;;;;;;;;::::0;::::3;;;;;;17190:187;;;17317:48;17330:12;17344;17358:6;17317:12;:48::i;:::-;17431:87;17455:12;17469;17483:7;17492;17501:6;17509:8;17431:23;:87::i;:::-;17590:94;17619:12;17633;17647:17;17666;17590:28;:94::i;:::-;-1:-1:-1::0;;;;;17959:34:28;;::::3;17929:27;17959:34:::0;;;:20:::3;:34;::::0;;;;;;;;;18054:29;;-1:-1:-1;;;18054:29:28;;;;17959:34;::::3;::::0;18004:94:::3;::::0;17959:34;;;;-1:-1:-1;;18054:29:28::3;::::0;;::::3;::::0;17959:34;18054:29;;;;;;17959:34;18054:29;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;18054:29:28;18085:12;18004:32:::3;:94::i;:::-;-1:-1:-1::0;18166:6:28;;15439:2741;-1:-1:-1;;;;;;;;;;;;15439:2741:28:o;7759:157:8:-;7847:1;7837:7;:11;;;:40;;;;-1:-1:-1;1846:7:8;7852:25;;;;;7837:40;7829:79;;;;;-1:-1:-1;;;7829:79:8;;;;;;;;;;;;;;;;;;;;;;;;;;;19713:155;19826:13;;19781:7;;19808:52;;1846:7;;19808:32;;:13;;:52;-1:-1:-1;;;19826:13:8;;;;;;19808:17;:32;:::i;21084:758::-;-1:-1:-1;;;21705:21:8;;21698:29;;;;21743:91;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21743:91:8;;;;;;;;;;;;;;;;;;;;;21084:758;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o",
  "source": "// SPDX-License-Identifier: SEE LICENSE IN LICENSE\r\npragma solidity 0.6.12;\r\nimport \"./PoolTokensContainer.sol\";\r\nimport \"./LiquidityPoolV2ConverterCustomFactory.sol\";\r\nimport \"../../LiquidityPoolConverter.sol\";\r\nimport \"../../interfaces/IConverterFactory.sol\";\r\nimport \"../../../utility/interfaces/IPriceOracle.sol\";\r\nimport \"../../../utility/Types.sol\";\r\n\r\n/**\r\n  * @dev Liquidity Pool v2 Converter\r\n  *\r\n  * The liquidity pool v2 converter is a specialized version of a converter that uses\r\n  * price oracles to rebalance the reserve weights in such a way that the primary token\r\n  * balance always strives to match the staked balance.\r\n  *\r\n  * This type of liquidity pool always has 2 reserves and the reserve weights are dynamic.\r\n*/\r\ncontract LiquidityPoolV2Converter is LiquidityPoolConverter {\r\n    uint8 internal constant AMPLIFICATION_FACTOR = 20;  // factor to use for conversion calculations (reduces slippage)\r\n\r\n    IPriceOracle public priceOracle;                                    // external price oracle\r\n    IERC20Token public primaryReserveToken;                             // primary reserve in the pool\r\n    IERC20Token public secondaryReserveToken;                           // secondary reserve in the pool (cache)\r\n    mapping (IERC20Token => uint256) private stakedBalances;            // tracks the staked liquidity in the pool plus the fees\r\n    mapping (IERC20Token => ISmartToken) private reservesToPoolTokens;  // maps each reserve to its pool token\r\n    mapping (ISmartToken => IERC20Token) private poolTokensToReserves;  // maps each pool token to its reserve\r\n\r\n    Fraction public externalRate;           // external rate of 1 primary token in secondary tokens\r\n    uint256 public externalRateUpdateTime;  // last time the external rate was updated (in seconds)\r\n\r\n    // used by the temp liquidity limit mechanism during the beta\r\n    mapping (IERC20Token => uint256) public maxStakedBalances;\r\n    bool public maxStakedBalanceEnabled = true;\r\n\r\n    uint32 public oracleDeviationFee = 10000; // oracle deviation fee, represented in ppm\r\n\r\n    /**\r\n      * @dev triggered when the oracle deviation fee is updated\r\n      *\r\n      * @param  _prevFee    previous fee percentage, represented in ppm\r\n      * @param  _newFee     new fee percentage, represented in ppm\r\n    */\r\n    event OracleDeviationFeeUpdate(uint32 _prevFee, uint32 _newFee);\r\n\r\n    /**\r\n      * @dev initializes a new LiquidityPoolV2Converter instance\r\n      *\r\n      * @param  _poolTokensContainer    pool tokens container governed by the converter\r\n      * @param  _registry               address of a contract registry contract\r\n      * @param  _maxConversionFee       maximum conversion fee, represented in ppm\r\n    */\r\n    constructor(IPoolTokensContainer _poolTokensContainer, IContractRegistry _registry, uint32 _maxConversionFee)\r\n        public LiquidityPoolConverter(_poolTokensContainer, _registry, _maxConversionFee)\r\n    {\r\n    }\r\n\r\n    // ensures the address is a pool token\r\n    modifier validPoolToken(ISmartToken _address) {\r\n        _validPoolToken(_address);\r\n        _;\r\n    }\r\n\r\n    // error message binary size optimization\r\n    function _validPoolToken(ISmartToken _address) internal view {\r\n        require(address(poolTokensToReserves[_address]) != address(0), \"ERR_INVALID_POOL_TOKEN\");\r\n    }\r\n\r\n    /**\r\n      * @dev returns the converter type\r\n      *\r\n      * @return see the converter types in the the main contract doc\r\n    */\r\n    function converterType() public pure override returns (uint16) {\r\n        return 2;\r\n    }\r\n\r\n    /**\r\n      * @dev returns true if the converter is active, false otherwise\r\n      *\r\n      * @return true if the converter is active, false otherwise\r\n    */\r\n    function isActive() public view override returns (bool) {\r\n        return super.isActive() && address(priceOracle) != address(0);\r\n    }\r\n\r\n    /**\r\n      * @dev sets the pool's primary reserve token / price oracles and activates the pool\r\n      * each oracle must be able to provide the rate for each reserve token\r\n      * note that the oracle must be whitelisted prior to the call\r\n      * can only be called by the owner while the pool is inactive\r\n      *\r\n      * @param _primaryReserveToken     address of the pool's primary reserve token\r\n      * @param _primaryReserveOracle    address of a chainlink price oracle for the primary reserve token\r\n      * @param _secondaryReserveOracle  address of a chainlink price oracle for the secondary reserve token\r\n    */\r\n    function activate(\r\n        IERC20Token _primaryReserveToken,\r\n        IChainlinkPriceOracle _primaryReserveOracle,\r\n        IChainlinkPriceOracle _secondaryReserveOracle)\r\n        public\r\n        inactive\r\n        ownerOnly\r\n        validReserve(_primaryReserveToken)\r\n        notThis(address(_primaryReserveOracle))\r\n        notThis(address(_secondaryReserveOracle))\r\n        validAddress(address(_primaryReserveOracle))\r\n        validAddress(address(_secondaryReserveOracle))\r\n    {\r\n        // validate anchor ownership\r\n        require(anchor.owner() == address(this), \"ERR_ANCHOR_NOT_OWNED\");\r\n\r\n        // validate oracles\r\n        IWhitelist oracleWhitelist = IWhitelist(addressOf(CHAINLINK_ORACLE_WHITELIST));\r\n        require(oracleWhitelist.isWhitelisted(address(_primaryReserveOracle)) &&\r\n                oracleWhitelist.isWhitelisted(address(_secondaryReserveOracle)), \"ERR_INVALID_ORACLE\");\r\n\r\n        // create the converter's pool tokens if they don't already exist\r\n        createPoolTokens();\r\n\r\n        // sets the primary & secondary reserve tokens\r\n        primaryReserveToken = _primaryReserveToken;\r\n        if (_primaryReserveToken == reserveTokens[0])\r\n            secondaryReserveToken = reserveTokens[1];\r\n        else\r\n            secondaryReserveToken = reserveTokens[0];\r\n\r\n        // creates and initalizes the price oracle and sets initial rates\r\n        LiquidityPoolV2ConverterCustomFactory customFactory =\r\n            LiquidityPoolV2ConverterCustomFactory(address(IConverterFactory(addressOf(CONVERTER_FACTORY)).customFactories(converterType())));\r\n        priceOracle = customFactory.createPriceOracle(\r\n            _primaryReserveToken,\r\n            secondaryReserveToken,\r\n            _primaryReserveOracle,\r\n            _secondaryReserveOracle);\r\n\r\n        externalRate = _effectiveTokensRate();\r\n        externalRateUpdateTime = time();\r\n\r\n        // if we are upgrading from an older converter, make sure that reserve balances are in-sync and rebalance\r\n        uint256 primaryReserveStakedBalance = reserveStakedBalance(primaryReserveToken);\r\n        uint256 primaryReserveBalance = reserveBalance(primaryReserveToken);\r\n        uint256 secondaryReserveBalance = reserveBalance(secondaryReserveToken);\r\n\r\n        if (primaryReserveStakedBalance == primaryReserveBalance) {\r\n            if (primaryReserveStakedBalance > 0 || secondaryReserveBalance > 0) {\r\n                rebalance();\r\n            }\r\n        }\r\n        else if (primaryReserveStakedBalance > 0 && primaryReserveBalance > 0 && secondaryReserveBalance > 0) {\r\n            rebalance();\r\n        }\r\n\r\n        emit Activation(converterType(), anchor, true);\r\n    }\r\n\r\n    /**\r\n      * @dev updates the current oracle deviation fee\r\n      * can only be called by the contract owner\r\n      *\r\n      * @param _oracleDeviationFee new oracle deviation fee, represented in ppm\r\n    */\r\n    function setOracleDeviationFee(uint32 _oracleDeviationFee) public ownerOnly {\r\n        require(_oracleDeviationFee <= PPM_RESOLUTION, \"ERR_INVALID_ORACLE_DEVIATION_FEE\");\r\n        emit OracleDeviationFeeUpdate(oracleDeviationFee, _oracleDeviationFee);\r\n        oracleDeviationFee = _oracleDeviationFee;\r\n    }\r\n\r\n    /**\r\n      * @dev returns the staked balance of a given reserve token\r\n      *\r\n      * @param _reserveToken    reserve token address\r\n      *\r\n      * @return staked balance\r\n    */\r\n    function reserveStakedBalance(IERC20Token _reserveToken)\r\n        public\r\n        view\r\n        validReserve(_reserveToken)\r\n        returns (uint256)\r\n    {\r\n        return stakedBalances[_reserveToken];\r\n    }\r\n\r\n    /**\r\n      * @dev returns the amplified balance of a given reserve token\r\n      *\r\n      * @param _reserveToken   reserve token address\r\n      *\r\n      * @return amplified balance\r\n    */\r\n    function reserveAmplifiedBalance(IERC20Token _reserveToken)\r\n        public\r\n        view\r\n        validReserve(_reserveToken)\r\n        returns (uint256)\r\n    {\r\n        return amplifiedBalance(_reserveToken);\r\n    }\r\n\r\n    /**\r\n      * @dev sets the reserve's staked balance\r\n      * can only be called by the upgrader contract while the upgrader is the owner\r\n      *\r\n      * @param _reserveToken    reserve token address\r\n      * @param _balance         new reserve staked balance\r\n    */\r\n    function setReserveStakedBalance(IERC20Token _reserveToken, uint256 _balance)\r\n        public\r\n        ownerOnly\r\n        only(CONVERTER_UPGRADER)\r\n        validReserve(_reserveToken)\r\n    {\r\n        stakedBalances[_reserveToken] = _balance;\r\n    }\r\n\r\n    /**\r\n      * @dev sets the max staked balance for both reserves\r\n      * available as a temporary mechanism during the beta\r\n      * can only be called by the owner\r\n      *\r\n      * @param _reserve1MaxStakedBalance    max staked balance for reserve 1\r\n      * @param _reserve2MaxStakedBalance    max staked balance for reserve 2\r\n    */\r\n    function setMaxStakedBalances(uint256 _reserve1MaxStakedBalance, uint256 _reserve2MaxStakedBalance) public ownerOnly {\r\n        maxStakedBalances[reserveTokens[0]] = _reserve1MaxStakedBalance;\r\n        maxStakedBalances[reserveTokens[1]] = _reserve2MaxStakedBalance;\r\n    }\r\n\r\n    /**\r\n      * @dev disables the max staked balance mechanism\r\n      * available as a temporary mechanism during the beta\r\n      * once disabled, it cannot be re-enabled\r\n      * can only be called by the owner\r\n    */\r\n    function disableMaxStakedBalances() public ownerOnly {\r\n        maxStakedBalanceEnabled = false;\r\n    }\r\n\r\n    /**\r\n      * @dev returns the pool token address by the reserve token address\r\n      *\r\n      * @param _reserveToken    reserve token address\r\n      *\r\n      * @return pool token address\r\n    */\r\n    function poolToken(IERC20Token _reserveToken) public view returns (ISmartToken) {\r\n        return reservesToPoolTokens[_reserveToken];\r\n    }\r\n\r\n    /**\r\n      * @dev returns the maximum number of pool tokens that can currently be liquidated\r\n      *\r\n      * @param _poolToken   address of the pool token\r\n      *\r\n      * @return liquidation limit\r\n    */\r\n    function liquidationLimit(ISmartToken _poolToken) public view returns (uint256) {\r\n        // get the pool token supply\r\n        uint256 poolTokenSupply = _poolToken.totalSupply();\r\n\r\n        // get the reserve token associated with the pool token and its balance / staked balance\r\n        IERC20Token reserveToken = poolTokensToReserves[_poolToken];\r\n        uint256 balance = reserveBalance(reserveToken);\r\n        uint256 stakedBalance = stakedBalances[reserveToken];\r\n\r\n        // calculate the amount that's available for liquidation\r\n        return balance.mul(poolTokenSupply).div(stakedBalance);\r\n    }\r\n\r\n    /**\r\n      * @dev defines a new reserve token for the converter\r\n      * can only be called by the owner while the converter is inactive and\r\n      * 2 reserves aren't defined yet\r\n      *\r\n      * @param _token   address of the reserve token\r\n      * @param _weight  reserve weight, represented in ppm, 1-1000000\r\n    */\r\n    function addReserve(IERC20Token _token, uint32 _weight) public override ownerOnly {\r\n        // verify that the converter doesn't have 2 reserves yet\r\n        require(reserveTokenCount() < 2, \"ERR_INVALID_RESERVE_COUNT\");\r\n        super.addReserve(_token, _weight);\r\n    }\r\n\r\n    /**\r\n      * @dev returns the effective rate of 1 primary token in secondary tokens\r\n      *\r\n      * @return rate of 1 primary token in secondary tokens (numerator)\r\n      * @return rate of 1 primary token in secondary tokens (denominator)\r\n    */\r\n    function effectiveTokensRate() public view returns (uint256, uint256) {\r\n        Fraction memory rate = _effectiveTokensRate();\r\n        return (rate.n, rate.d);\r\n    }\r\n\r\n    /**\r\n      * @dev returns the effective reserve tokens weights\r\n      *\r\n      * @return reserve1 weight\r\n      * @return reserve2 weight\r\n    */\r\n    function effectiveReserveWeights() public view returns (uint256, uint256) {\r\n        Fraction memory rate = _effectiveTokensRate();\r\n        (uint32 primaryReserveWeight, uint32 secondaryReserveWeight) = effectiveReserveWeights(rate);\r\n\r\n        if (primaryReserveToken == reserveTokens[0]) {\r\n            return (primaryReserveWeight, secondaryReserveWeight);\r\n        }\r\n\r\n        return (secondaryReserveWeight, primaryReserveWeight);\r\n    }\r\n\r\n    /**\r\n      * @dev returns the expected target amount of converting one reserve to another along with the fee\r\n      *\r\n      * @param _sourceToken contract address of the source reserve token\r\n      * @param _targetToken contract address of the target reserve token\r\n      * @param _amount      amount of tokens received from the user\r\n      *\r\n      * @return expected target amount\r\n      * @return expected fee\r\n    */\r\n    function targetAmountAndFee(IERC20Token _sourceToken, IERC20Token _targetToken, uint256 _amount)\r\n        public\r\n        view\r\n        override\r\n        active\r\n        validReserve(_sourceToken)\r\n        validReserve(_targetToken)\r\n        returns (uint256, uint256)\r\n    {\r\n        // validate input\r\n        require(_sourceToken != _targetToken, \"ERR_SAME_SOURCE_TARGET\");\r\n\r\n        uint32 sourceTokenWeight;\r\n        uint32 targetTokenWeight;\r\n\r\n        // if the rate was already checked in this block, use the current weights; otherwise, get the new weights\r\n        if (externalRateUpdateTime == time()) {\r\n            sourceTokenWeight = reserves[_sourceToken].weight;\r\n            targetTokenWeight = PPM_RESOLUTION - sourceTokenWeight;\r\n        }\r\n        else {\r\n            Fraction memory rate = _effectiveTokensRate();\r\n            (uint32 primaryReserveWeight, uint32 secondaryReserveWeight) = effectiveReserveWeights(rate);\r\n\r\n            if (_sourceToken == primaryReserveToken) {\r\n                sourceTokenWeight = primaryReserveWeight;\r\n                targetTokenWeight = secondaryReserveWeight;\r\n            }\r\n            else {\r\n                sourceTokenWeight = secondaryReserveWeight;\r\n                targetTokenWeight = primaryReserveWeight;\r\n            }\r\n        }\r\n\r\n        // return the target amount and the conversion fee using the updated reserve weights\r\n        (uint256 targetAmount, , uint256 fee) = targetAmountAndFees(_sourceToken, _targetToken, sourceTokenWeight, targetTokenWeight, _amount);\r\n        return (targetAmount, fee);\r\n    }\r\n\r\n    /**\r\n      * @dev converts a specific amount of source tokens to target tokens\r\n      * can only be called by the bancor network contract\r\n      *\r\n      * @param _sourceToken source ERC20 token\r\n      * @param _targetToken target ERC20 token\r\n      * @param _amount      amount of tokens to convert (in units of the source token)\r\n      * @param _trader      address of the caller who executed the conversion\r\n      * @param _beneficiary wallet to receive the conversion result\r\n      *\r\n      * @return amount of tokens received (in units of the target token)\r\n    */\r\n    function doConvert(IERC20Token _sourceToken, IERC20Token _targetToken, uint256 _amount, address _trader, address payable _beneficiary)\r\n        internal\r\n        override\r\n        active\r\n        validReserve(_sourceToken)\r\n        validReserve(_targetToken)\r\n        returns (uint256)\r\n    {\r\n        // avoid updating the rate more than once per block\r\n        if (externalRateUpdateTime < time()) {\r\n            externalRateUpdateTime = time();\r\n            externalRate = _effectiveTokensRate();\r\n            rebalance();\r\n        }\r\n\r\n        uint32 sourceTokenWeight = reserves[_sourceToken].weight;\r\n        uint32 targetTokenWeight = PPM_RESOLUTION - sourceTokenWeight;\r\n\r\n        // get expected target amount and fees\r\n        (uint256 amount, uint256 standardFee, uint256 totalFee) = targetAmountAndFees(_sourceToken, _targetToken, sourceTokenWeight, targetTokenWeight, _amount);\r\n\r\n        // ensure that the trade gives something in return\r\n        require(amount != 0, \"ERR_ZERO_TARGET_AMOUNT\");\r\n\r\n        // ensure that the input amount was already deposited\r\n        if (_sourceToken == ETH_RESERVE_ADDRESS)\r\n            require(msg.value == _amount, \"ERR_ETH_AMOUNT_MISMATCH\");\r\n        else\r\n            require(msg.value == 0 && _sourceToken.balanceOf(address(this)).sub(reserveBalance(_sourceToken)) >= _amount, \"ERR_INVALID_AMOUNT\");\r\n\r\n        // sync the reserve balances\r\n        syncReserveBalance(_sourceToken);\r\n        reserves[_targetToken].balance = reserveBalance(_targetToken).sub(amount);\r\n\r\n        // update the target staked balance with the fee\r\n        stakedBalances[_targetToken] = stakedBalances[_targetToken].add(standardFee);\r\n\r\n        // transfer funds to the beneficiary in the to reserve token\r\n        if (_targetToken == ETH_RESERVE_ADDRESS) {\r\n            _beneficiary.transfer(amount);\r\n        }\r\n        else {\r\n            safeTransfer(_targetToken, _beneficiary, amount);\r\n        }\r\n\r\n        // dispatch the conversion event\r\n        dispatchConversionEvent(_sourceToken, _targetToken, _trader, _amount, amount, totalFee);\r\n\r\n        // dispatch the rate event for the reserve tokens\r\n        dispatchTokenRateUpdateEvent(_sourceToken, _targetToken, sourceTokenWeight, targetTokenWeight);\r\n\r\n        // dispatch the rate event for the target reserve pool token\r\n        // the target reserve pool token rate is the only one that's affected\r\n        // by conversions since conversion fees are applied to the target reserve\r\n        ISmartToken targetPoolToken = reservesToPoolTokens[_targetToken];\r\n        dispatchPoolTokenRateUpdateEvent(targetPoolToken, targetPoolToken.totalSupply(), _targetToken);\r\n\r\n        // return the conversion result amount\r\n        return amount;\r\n    }\r\n\r\n    /**\r\n      * @dev increases the pool's liquidity and mints new shares in the pool to the caller\r\n      *\r\n      * @param _reserveToken    address of the reserve token to add liquidity to\r\n      * @param _amount          amount of liquidity to add\r\n      * @param _minReturn       minimum return-amount of pool tokens\r\n      *\r\n      * @return amount of pool tokens minted\r\n    */\r\n    function addLiquidity(IERC20Token _reserveToken, uint256 _amount, uint256 _minReturn)\r\n        public\r\n        payable\r\n        protected\r\n        active\r\n        validReserve(_reserveToken)\r\n        greaterThanZero(_amount)\r\n        greaterThanZero(_minReturn)\r\n        returns (uint256)\r\n    {\r\n        // verify that msg.value is identical to the provided amount for ETH reserve, or 0 otherwise\r\n        require(_reserveToken == ETH_RESERVE_ADDRESS ? msg.value == _amount : msg.value == 0, \"ERR_ETH_AMOUNT_MISMATCH\");\r\n\r\n        // sync the reserve balances just in case\r\n        syncReserveBalances();\r\n\r\n        // for ETH reserve, deduct the amount that was just synced (since it's already in the converter)\r\n        if (_reserveToken == ETH_RESERVE_ADDRESS) {\r\n            reserves[ETH_RESERVE_ADDRESS].balance = reserves[ETH_RESERVE_ADDRESS].balance.sub(msg.value);\r\n        }\r\n\r\n        // get the reserve staked balance before adding the liquidity to it\r\n        uint256 initialStakedBalance = stakedBalances[_reserveToken];\r\n\r\n        // during the beta, ensure that the new staked balance isn't greater than the max limit\r\n        if (maxStakedBalanceEnabled) {\r\n            require(maxStakedBalances[_reserveToken] == 0 || initialStakedBalance.add(_amount) <= maxStakedBalances[_reserveToken], \"ERR_MAX_STAKED_BALANCE_REACHED\");\r\n        }\r\n\r\n        // get the pool token associated with the reserve and its supply\r\n        ISmartToken reservePoolToken = reservesToPoolTokens[_reserveToken];\r\n        uint256 poolTokenSupply = reservePoolToken.totalSupply();\r\n\r\n        // for non ETH reserve, transfer the funds from the user to the pool\r\n        if (_reserveToken != ETH_RESERVE_ADDRESS)\r\n            safeTransferFrom(_reserveToken, msg.sender, address(this), _amount);\r\n\r\n        // sync the reserve balance / staked balance\r\n        reserves[_reserveToken].balance = reserves[_reserveToken].balance.add(_amount);\r\n        stakedBalances[_reserveToken] = initialStakedBalance.add(_amount);\r\n\r\n        // calculate how many pool tokens to mint\r\n        // for an empty pool, the price is 1:1, otherwise the price is based on the ratio\r\n        // between the pool token supply and the staked balance\r\n        uint256 poolTokenAmount = 0;\r\n        if (initialStakedBalance == 0 || poolTokenSupply == 0)\r\n            poolTokenAmount = _amount;\r\n        else\r\n            poolTokenAmount = _amount.mul(poolTokenSupply).div(initialStakedBalance);\r\n        require(poolTokenAmount >= _minReturn, \"ERR_RETURN_TOO_LOW\");\r\n\r\n        // mint new pool tokens to the caller\r\n        IPoolTokensContainer(address(anchor)).mint(reservePoolToken, msg.sender, poolTokenAmount);\r\n\r\n        // rebalance the pool's reserve weights\r\n        rebalance();\r\n\r\n        // dispatch the `LiquidityAdded` event\r\n        emit LiquidityAdded(msg.sender, _reserveToken, _amount, initialStakedBalance.add(_amount), poolTokenSupply.add(poolTokenAmount));\r\n\r\n        // dispatch the rate event for the relevant pool token\r\n        dispatchPoolTokenRateUpdateEvent(reservePoolToken, poolTokenSupply.add(poolTokenAmount), _reserveToken);\r\n\r\n        // dispatch the rate event for the reserve tokens\r\n        dispatchTokenRateUpdateEvent(reserveTokens[0], reserveTokens[1], 0, 0);\r\n\r\n        // return the amount of pool tokens minted\r\n        return poolTokenAmount;\r\n    }\r\n\r\n    /**\r\n      * @dev decreases the pool's liquidity and burns the caller's shares in the pool\r\n      *\r\n      * @param _poolToken   address of the pool token\r\n      * @param _amount      amount of pool tokens to burn\r\n      * @param _minReturn   minimum return-amount of reserve tokens\r\n      *\r\n      * @return amount of liquidity removed\r\n    */\r\n    function removeLiquidity(ISmartToken _poolToken, uint256 _amount, uint256 _minReturn)\r\n        public\r\n        protected\r\n        active\r\n        validPoolToken(_poolToken)\r\n        greaterThanZero(_amount)\r\n        greaterThanZero(_minReturn)\r\n        returns (uint256)\r\n    {\r\n        // sync the reserve balances just in case\r\n        syncReserveBalances();\r\n\r\n        // get the pool token supply before burning the caller's shares\r\n        uint256 initialPoolSupply = _poolToken.totalSupply();\r\n\r\n        // get the reserve token return before burning the caller's shares\r\n        (uint256 reserveAmount, ) = removeLiquidityReturnAndFee(_poolToken, _amount);\r\n        require(reserveAmount >= _minReturn, \"ERR_RETURN_TOO_LOW\");\r\n\r\n        // get the reserve token associated with the pool token\r\n        IERC20Token reserveToken = poolTokensToReserves[_poolToken];\r\n\r\n        // burn the caller's pool tokens\r\n        IPoolTokensContainer(address(anchor)).burn(_poolToken, msg.sender, _amount);\r\n\r\n        // sync the reserve balance / staked balance\r\n        reserves[reserveToken].balance = reserves[reserveToken].balance.sub(reserveAmount);\r\n        uint256 newStakedBalance = stakedBalances[reserveToken].sub(reserveAmount);\r\n        stakedBalances[reserveToken] = newStakedBalance;\r\n\r\n        // transfer the reserve amount to the caller\r\n        if (reserveToken == ETH_RESERVE_ADDRESS)\r\n            msg.sender.transfer(reserveAmount);\r\n        else\r\n            safeTransfer(reserveToken, msg.sender, reserveAmount);\r\n\r\n        // rebalance the pool's reserve weights\r\n        rebalance();\r\n\r\n        uint256 newPoolTokenSupply = initialPoolSupply.sub(_amount);\r\n\r\n        // dispatch the `LiquidityRemoved` event\r\n        emit LiquidityRemoved(msg.sender, reserveToken, reserveAmount, newStakedBalance, newPoolTokenSupply);\r\n\r\n        // dispatch the rate event for the relevant pool token\r\n        dispatchPoolTokenRateUpdateEvent(_poolToken, newPoolTokenSupply, reserveToken);\r\n\r\n        // dispatch the rate event for the reserve tokens\r\n        dispatchTokenRateUpdateEvent(reserveTokens[0], reserveTokens[1], 0, 0);\r\n\r\n        // return the amount of liquidity removed\r\n        return reserveAmount;\r\n    }\r\n\r\n    /**\r\n      * @dev calculates the amount of reserve tokens entitled for a given amount of pool tokens\r\n      * note that a fee is applied according to the equilibrium level of the primary reserve token\r\n      *\r\n      * @param _poolToken   address of the pool token\r\n      * @param _amount      amount of pool tokens\r\n      *\r\n      * @return amount after fee and fee, in reserve token units\r\n    */\r\n    function removeLiquidityReturnAndFee(ISmartToken _poolToken, uint256 _amount) public view returns (uint256, uint256) {\r\n        uint256 totalSupply = _poolToken.totalSupply();\r\n        uint256 stakedBalance = stakedBalances[poolTokensToReserves[_poolToken]];\r\n\r\n        if (_amount < totalSupply) {\r\n            uint256 x = stakedBalances[primaryReserveToken].mul(AMPLIFICATION_FACTOR);\r\n            uint256 y = amplifiedBalance(primaryReserveToken);\r\n            (uint256 min, uint256 max) = x < y ? (x, y) : (y, x);\r\n            uint256 amountBeforeFee = _amount.mul(stakedBalance).div(totalSupply);\r\n            uint256 amountAfterFee = amountBeforeFee.mul(min).div(max);\r\n            return (amountAfterFee, amountBeforeFee - amountAfterFee);\r\n        }\r\n        return (stakedBalance, 0);\r\n    }\r\n\r\n    /**\r\n      * @dev returns the expected target amount of converting one reserve to another along with the fees\r\n      * this version of the function expects the reserve weights as an input (gas optimization)\r\n      *\r\n      * @param _sourceToken     contract address of the source reserve token\r\n      * @param _targetToken     contract address of the target reserve token\r\n      * @param _sourceWeight    source reserve token weight\r\n      * @param _targetWeight    target reserve token weight\r\n      * @param _amount          amount of tokens received from the user\r\n      *\r\n      * @return expected target amount\r\n      * @return expected standard conversion fee\r\n      * @return expected total conversion fee\r\n    */\r\n    function targetAmountAndFees(\r\n        IERC20Token _sourceToken,\r\n        IERC20Token _targetToken,\r\n        uint32 _sourceWeight,\r\n        uint32 _targetWeight,\r\n        uint256 _amount)\r\n        private\r\n        view\r\n        returns (uint256, uint256, uint256)\r\n    {\r\n        // get the tokens amplified balances\r\n        uint256 sourceBalance = amplifiedBalance(_sourceToken);\r\n        uint256 targetBalance = amplifiedBalance(_targetToken);\r\n\r\n        // get the target amount\r\n        uint256 targetAmount = IBancorFormula(addressOf(BANCOR_FORMULA)).crossReserveTargetAmount(\r\n            sourceBalance,\r\n            _sourceWeight,\r\n            targetBalance,\r\n            _targetWeight,\r\n            _amount\r\n        );\r\n\r\n        uint256 standardFee = calculateFee(targetAmount);\r\n        uint256 totalFee = targetAmount.mul(oracleDeviationFee).div(PPM_RESOLUTION).add(standardFee);\r\n\r\n        // return a tuple of [target amount minus total conversion fee, standard conversion fee, total conversion fee]\r\n        return (targetAmount.sub(totalFee), standardFee, totalFee);\r\n    }\r\n\r\n    /**\r\n      * @dev creates the converter's pool tokens\r\n      * note that technically pool tokens can be created on deployment but gas limit\r\n      * might get too high for a block, so creating them on first activation\r\n      *\r\n    */\r\n    function createPoolTokens() internal {\r\n        IPoolTokensContainer container = IPoolTokensContainer(address(anchor));\r\n        ISmartToken[] memory poolTokens = container.poolTokens();\r\n        bool initialSetup = poolTokens.length == 0;\r\n\r\n        uint256 reserveCount = reserveTokens.length;\r\n        for (uint256 i = 0; i < reserveCount; i++) {\r\n            ISmartToken reservePoolToken;\r\n            if (initialSetup) {\r\n                reservePoolToken = container.createToken();\r\n            }\r\n            else {\r\n                reservePoolToken = poolTokens[i];\r\n            }\r\n\r\n            // cache the pool token address (gas optimization)\r\n            reservesToPoolTokens[reserveTokens[i]] = reservePoolToken;\r\n            poolTokensToReserves[reservePoolToken] = reserveTokens[i];\r\n        }\r\n    }\r\n\r\n    /**\r\n      * @dev returns the effective rate between the two reserve tokens\r\n      *\r\n      * @return rate\r\n    */\r\n    function _effectiveTokensRate() private view returns (Fraction memory) {\r\n        (uint256 latestRateN, uint256 latestRateD) = priceOracle.latestRate(primaryReserveToken, secondaryReserveToken);\r\n        return Fraction({ n: latestRateN, d: latestRateD });\r\n    }\r\n\r\n    /**\r\n      * @dev updates the pool's reserve weights with new values in order to push the current primary\r\n      * reserve token balance to its staked balance\r\n    */\r\n    function rebalance() private {\r\n        (reserves[primaryReserveToken].weight, reserves[secondaryReserveToken].weight) = effectiveReserveWeights(externalRate);\r\n    }\r\n\r\n    /**\r\n      * @dev returns the amplified balance of a given reserve token\r\n      * this version skips the input validation (gas optimization)\r\n      *\r\n      * @param _reserveToken   reserve token address\r\n      *\r\n      * @return amplified balance\r\n    */\r\n    function amplifiedBalance(IERC20Token _reserveToken) internal view returns (uint256) {\r\n        return stakedBalances[_reserveToken].mul(AMPLIFICATION_FACTOR - 1).add(reserves[_reserveToken].balance);\r\n    }\r\n\r\n    /**\r\n      * @dev returns the effective reserve weights based on the staked balance, current balance and oracle price\r\n      *\r\n      * @param _rate    rate between the reserve tokens\r\n      *\r\n      * @return new primary reserve weight\r\n      * @return new secondary reserve weight\r\n    */\r\n    function effectiveReserveWeights(Fraction memory _rate) private view returns (uint32, uint32) {\r\n        // get the primary reserve staked balance\r\n        uint256 primaryStakedBalance = stakedBalances[primaryReserveToken];\r\n\r\n        // get the tokens amplified balances\r\n        uint256 primaryBalance = amplifiedBalance(primaryReserveToken);\r\n        uint256 secondaryBalance = amplifiedBalance(secondaryReserveToken);\r\n\r\n        // get the new weights\r\n        return IBancorFormula(addressOf(BANCOR_FORMULA)).balancedWeights(\r\n            primaryStakedBalance.mul(AMPLIFICATION_FACTOR),\r\n            primaryBalance,\r\n            secondaryBalance,\r\n            _rate.n,\r\n            _rate.d);\r\n    }\r\n\r\n    /**\r\n      * @dev dispatches token rate update event for the reserve tokens\r\n      *\r\n      * @param _token1          contract address of the token to calculate the rate of one unit of\r\n      * @param _token2          contract address of the token to calculate the rate of one `_token1` unit in\r\n      * @param _token1Weight    reserve weight of token1\r\n      * @param _token2Weight    reserve weight of token2\r\n    */\r\n    function dispatchTokenRateUpdateEvent(IERC20Token _token1, IERC20Token _token2, uint32 _token1Weight, uint32 _token2Weight) private {\r\n        // get the amplified balances\r\n        uint256 token1Balance = amplifiedBalance(_token1);\r\n        uint256 token2Balance = amplifiedBalance(_token2);\r\n\r\n        // get the first token weight\r\n        if (_token1Weight == 0) {\r\n            _token1Weight = reserves[_token1].weight;\r\n        }\r\n\r\n        // get the second token weight\r\n        if (_token2Weight == 0) {\r\n            _token2Weight = PPM_RESOLUTION - _token1Weight;\r\n        }\r\n\r\n        emit TokenRateUpdate(_token1, _token2, token2Balance.mul(_token1Weight), token1Balance.mul(_token2Weight));\r\n    }\r\n\r\n    /**\r\n      * @dev dispatches token rate update event for one of the pool tokens\r\n      *\r\n      * @param _poolToken       address of the pool token\r\n      * @param _poolTokenSupply total pool token supply\r\n      * @param _reserveToken    address of the reserve token\r\n    */\r\n    function dispatchPoolTokenRateUpdateEvent(ISmartToken _poolToken, uint256 _poolTokenSupply, IERC20Token _reserveToken) private {\r\n        emit TokenRateUpdate(_poolToken, _reserveToken, stakedBalances[_reserveToken], _poolTokenSupply);\r\n    }\r\n\r\n    /**\r\n      * @dev returns the current time\r\n    */\r\n    function time() internal view virtual returns (uint256) {\r\n        return now;\r\n    }\r\n}\r\n",
  "sourcePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/LiquidityPoolV2Converter.sol",
  "ast": {
    "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/LiquidityPoolV2Converter.sol",
    "exportedSymbols": {
      "LiquidityPoolV2Converter": [
        18367
      ]
    },
    "id": 18368,
    "license": "SEE LICENSE IN LICENSE",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 16651,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "52:23:28"
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/PoolTokensContainer.sol",
        "file": "./PoolTokensContainer.sol",
        "id": 16652,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 18725,
        "src": "77:35:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/LiquidityPoolV2ConverterCustomFactory.sol",
        "file": "./LiquidityPoolV2ConverterCustomFactory.sol",
        "id": 16653,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 18457,
        "src": "114:53:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/LiquidityPoolConverter.sol",
        "file": "../../LiquidityPoolConverter.sol",
        "id": 16654,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 13078,
        "src": "169:42:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterFactory.sol",
        "file": "../../interfaces/IConverterFactory.sol",
        "id": 16655,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 13390,
        "src": "213:48:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IPriceOracle.sol",
        "file": "../../../utility/interfaces/IPriceOracle.sol",
        "id": 16656,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 23226,
        "src": "263:54:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Types.sol",
        "file": "../../../utility/Types.sol",
        "id": 16657,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 22917,
        "src": "319:36:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 16659,
              "name": "LiquidityPoolConverter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13077,
              "src": "778:22:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_LiquidityPoolConverter_$13077",
                "typeString": "contract LiquidityPoolConverter"
              }
            },
            "id": 16660,
            "nodeType": "InheritanceSpecifier",
            "src": "778:22:28"
          }
        ],
        "contractDependencies": [
          10039,
          13077,
          13340,
          22053,
          22152,
          22576,
          22860,
          22909,
          22995,
          23181,
          23241
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 16658,
          "nodeType": "StructuredDocumentation",
          "src": "359:380:28",
          "text": " @dev Liquidity Pool v2 Converter\n The liquidity pool v2 converter is a specialized version of a converter that uses\n price oracles to rebalance the reserve weights in such a way that the primary token\n balance always strives to match the staked balance.\n This type of liquidity pool always has 2 reserves and the reserve weights are dynamic."
        },
        "fullyImplemented": true,
        "id": 18367,
        "linearizedBaseContracts": [
          18367,
          13077,
          10039,
          22576,
          22053,
          22909,
          22995,
          22152,
          22860,
          23241,
          13340,
          23181
        ],
        "name": "LiquidityPoolV2Converter",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 16663,
            "mutability": "constant",
            "name": "AMPLIFICATION_FACTOR",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "808:49:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 16661,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "808:5:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3230",
              "id": 16662,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "855:2:28",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "2630c12f",
            "id": 16665,
            "mutability": "mutable",
            "name": "priceOracle",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "931:31:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IPriceOracle_$23225",
              "typeString": "contract IPriceOracle"
            },
            "typeName": {
              "contractScope": null,
              "id": 16664,
              "name": "IPriceOracle",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23225,
              "src": "931:12:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                "typeString": "contract IPriceOracle"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "0337e3fb",
            "id": 16667,
            "mutability": "mutable",
            "name": "primaryReserveToken",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1029:38:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IERC20Token_$21461",
              "typeString": "contract IERC20Token"
            },
            "typeName": {
              "contractScope": null,
              "id": 16666,
              "name": "IERC20Token",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21461,
              "src": "1029:11:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                "typeString": "contract IERC20Token"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "dc75eb9a",
            "id": 16669,
            "mutability": "mutable",
            "name": "secondaryReserveToken",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1133:40:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IERC20Token_$21461",
              "typeString": "contract IERC20Token"
            },
            "typeName": {
              "contractScope": null,
              "id": 16668,
              "name": "IERC20Token",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21461,
              "src": "1133:11:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                "typeString": "contract IERC20Token"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 16673,
            "mutability": "mutable",
            "name": "stakedBalances",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1247:55:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
              "typeString": "mapping(contract IERC20Token => uint256)"
            },
            "typeName": {
              "id": 16672,
              "keyType": {
                "contractScope": null,
                "id": 16670,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21461,
                "src": "1256:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                  "typeString": "contract IERC20Token"
                }
              },
              "nodeType": "Mapping",
              "src": "1247:32:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                "typeString": "mapping(contract IERC20Token => uint256)"
              },
              "valueType": {
                "id": 16671,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1271:7:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 16677,
            "mutability": "mutable",
            "name": "reservesToPoolTokens",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1377:65:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
              "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
            },
            "typeName": {
              "id": 16676,
              "keyType": {
                "contractScope": null,
                "id": 16674,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21461,
                "src": "1386:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                  "typeString": "contract IERC20Token"
                }
              },
              "nodeType": "Mapping",
              "src": "1377:36:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
                "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
              },
              "valueType": {
                "contractScope": null,
                "id": 16675,
                "name": "ISmartToken",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21516,
                "src": "1401:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ISmartToken_$21516",
                  "typeString": "contract ISmartToken"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 16681,
            "mutability": "mutable",
            "name": "poolTokensToReserves",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1489:65:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
              "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
            },
            "typeName": {
              "id": 16680,
              "keyType": {
                "contractScope": null,
                "id": 16678,
                "name": "ISmartToken",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21516,
                "src": "1498:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ISmartToken_$21516",
                  "typeString": "contract ISmartToken"
                }
              },
              "nodeType": "Mapping",
              "src": "1489:36:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
              },
              "valueType": {
                "contractScope": null,
                "id": 16679,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21461,
                "src": "1513:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                  "typeString": "contract IERC20Token"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "functionSelector": "ab28b174",
            "id": 16683,
            "mutability": "mutable",
            "name": "externalRate",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1603:28:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Fraction_$22916_storage",
              "typeString": "struct Fraction"
            },
            "typeName": {
              "contractScope": null,
              "id": 16682,
              "name": "Fraction",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22916,
              "src": "1603:8:28",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                "typeString": "struct Fraction"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "fd2d6c7c",
            "id": 16685,
            "mutability": "mutable",
            "name": "externalRateUpdateTime",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1704:37:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 16684,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1704:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "98a71dcb",
            "id": 16689,
            "mutability": "mutable",
            "name": "maxStakedBalances",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1874:57:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
              "typeString": "mapping(contract IERC20Token => uint256)"
            },
            "typeName": {
              "id": 16688,
              "keyType": {
                "contractScope": null,
                "id": 16686,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21461,
                "src": "1883:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                  "typeString": "contract IERC20Token"
                }
              },
              "nodeType": "Mapping",
              "src": "1874:32:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                "typeString": "mapping(contract IERC20Token => uint256)"
              },
              "valueType": {
                "id": 16687,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1898:7:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "0a55fb3d",
            "id": 16692,
            "mutability": "mutable",
            "name": "maxStakedBalanceEnabled",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1938:42:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 16690,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1938:4:28",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "74727565",
              "id": 16691,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1976:4:28",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "true"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "34d084b9",
            "id": 16695,
            "mutability": "mutable",
            "name": "oracleDeviationFee",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1989:40:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 16693,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1989:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3130303030",
              "id": 16694,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2024:5:28",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000_by_1",
                "typeString": "int_const 10000"
              },
              "value": "10000"
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 16696,
              "nodeType": "StructuredDocumentation",
              "src": "2082:226:28",
              "text": " @dev triggered when the oracle deviation fee is updated\n @param  _prevFee    previous fee percentage, represented in ppm\n @param  _newFee     new fee percentage, represented in ppm"
            },
            "id": 16702,
            "name": "OracleDeviationFeeUpdate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16698,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_prevFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16702,
                  "src": "2345:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 16697,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2345:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16700,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16702,
                  "src": "2362:14:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 16699,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2362:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2344:33:28"
            },
            "src": "2314:64:28"
          },
          {
            "body": {
              "id": 16717,
              "nodeType": "Block",
              "src": "2938:8:28",
              "statements": []
            },
            "documentation": {
              "id": 16703,
              "nodeType": "StructuredDocumentation",
              "src": "2386:340:28",
              "text": " @dev initializes a new LiquidityPoolV2Converter instance\n @param  _poolTokensContainer    pool tokens container governed by the converter\n @param  _registry               address of a contract registry contract\n @param  _maxConversionFee       maximum conversion fee, represented in ppm"
            },
            "id": 16718,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 16712,
                    "name": "_poolTokensContainer",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16705,
                    "src": "2881:20:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                      "typeString": "contract IPoolTokensContainer"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 16713,
                    "name": "_registry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16707,
                    "src": "2903:9:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$23165",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 16714,
                    "name": "_maxConversionFee",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16709,
                    "src": "2914:17:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  }
                ],
                "id": 16715,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16711,
                  "name": "LiquidityPoolConverter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13077,
                  "src": "2858:22:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_LiquidityPoolConverter_$13077_$",
                    "typeString": "type(contract LiquidityPoolConverter)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2858:74:28"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 16710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16705,
                  "mutability": "mutable",
                  "name": "_poolTokensContainer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16718,
                  "src": "2744:41:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                    "typeString": "contract IPoolTokensContainer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16704,
                    "name": "IPoolTokensContainer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 18801,
                    "src": "2744:20:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                      "typeString": "contract IPoolTokensContainer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16707,
                  "mutability": "mutable",
                  "name": "_registry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16718,
                  "src": "2787:27:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IContractRegistry_$23165",
                    "typeString": "contract IContractRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16706,
                    "name": "IContractRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 23165,
                    "src": "2787:17:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$23165",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16709,
                  "mutability": "mutable",
                  "name": "_maxConversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16718,
                  "src": "2816:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 16708,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2816:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2743:98:28"
            },
            "returnParameters": {
              "id": 16716,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2938:0:28"
            },
            "scope": 18367,
            "src": "2732:214:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 16727,
              "nodeType": "Block",
              "src": "3044:56:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16723,
                        "name": "_address",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16720,
                        "src": "3071:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      ],
                      "id": 16722,
                      "name": "_validPoolToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16749,
                      "src": "3055:15:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ISmartToken_$21516_$returns$__$",
                        "typeString": "function (contract ISmartToken) view"
                      }
                    },
                    "id": 16724,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3055:25:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16725,
                  "nodeType": "ExpressionStatement",
                  "src": "3055:25:28"
                },
                {
                  "id": 16726,
                  "nodeType": "PlaceholderStatement",
                  "src": "3091:1:28"
                }
              ]
            },
            "documentation": null,
            "id": 16728,
            "name": "validPoolToken",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 16721,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16720,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16728,
                  "src": "3022:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16719,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "3022:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3021:22:28"
            },
            "src": "2998:102:28",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 16748,
              "nodeType": "Block",
              "src": "3216:107:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 16744,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 16736,
                                "name": "poolTokensToReserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16681,
                                "src": "3243:20:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                                  "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
                                }
                              },
                              "id": 16738,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 16737,
                                "name": "_address",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16730,
                                "src": "3264:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                  "typeString": "contract ISmartToken"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3243:30:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            ],
                            "id": 16735,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3235:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 16734,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3235:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 16739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3235:39:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 16742,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3286:1:28",
                              "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": 16741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3278:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 16740,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3278:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 16743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3278:10:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3235:53:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f504f4f4c5f544f4b454e",
                        "id": 16745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3290:24:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_eed1b5de9a98cde04e371329406f26607f5671e3e7b23ea150ebcb6d35102f1f",
                          "typeString": "literal_string \"ERR_INVALID_POOL_TOKEN\""
                        },
                        "value": "ERR_INVALID_POOL_TOKEN"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_eed1b5de9a98cde04e371329406f26607f5671e3e7b23ea150ebcb6d35102f1f",
                          "typeString": "literal_string \"ERR_INVALID_POOL_TOKEN\""
                        }
                      ],
                      "id": 16733,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3227:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3227:88:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16747,
                  "nodeType": "ExpressionStatement",
                  "src": "3227:88:28"
                }
              ]
            },
            "documentation": null,
            "id": 16749,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validPoolToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 16731,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16730,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16749,
                  "src": "3180:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16729,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "3180:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3179:22:28"
            },
            "returnParameters": {
              "id": 16732,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3216:0:28"
            },
            "scope": 18367,
            "src": "3155:168:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              9242
            ],
            "body": {
              "id": 16758,
              "nodeType": "Block",
              "src": "3531:27:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "32",
                    "id": 16756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3549:1:28",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "functionReturnParameters": 16755,
                  "id": 16757,
                  "nodeType": "Return",
                  "src": "3542:8:28"
                }
              ]
            },
            "documentation": {
              "id": 16750,
              "nodeType": "StructuredDocumentation",
              "src": "3331:131:28",
              "text": " @dev returns the converter type\n @return see the converter types in the the main contract doc"
            },
            "functionSelector": "3e8ff43f",
            "id": 16759,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "converterType",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16752,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3505:8:28"
            },
            "parameters": {
              "id": 16751,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3490:2:28"
            },
            "returnParameters": {
              "id": 16755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16754,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16759,
                  "src": "3523:6:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 16753,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3523:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3522:8:28"
            },
            "scope": 18367,
            "src": "3468:90:28",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9362
            ],
            "body": {
              "id": 16780,
              "nodeType": "Block",
              "src": "3785:80:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 16778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 16766,
                          "name": "super",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -25,
                          "src": "3803:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_super$_LiquidityPoolV2Converter_$18367",
                            "typeString": "contract super LiquidityPoolV2Converter"
                          }
                        },
                        "id": 16767,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isActive",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9362,
                        "src": "3803:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 16768,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3803:16:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 16777,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 16771,
                            "name": "priceOracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16665,
                            "src": "3831:11:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                              "typeString": "contract IPriceOracle"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                              "typeString": "contract IPriceOracle"
                            }
                          ],
                          "id": 16770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3823:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16769,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3823:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 16772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3823:20:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 16775,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3855:1:28",
                            "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": 16774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3847:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16773,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3847:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 16776,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3847:10:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "3823:34:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3803:54:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 16765,
                  "id": 16779,
                  "nodeType": "Return",
                  "src": "3796:61:28"
                }
              ]
            },
            "documentation": {
              "id": 16760,
              "nodeType": "StructuredDocumentation",
              "src": "3566:157:28",
              "text": " @dev returns true if the converter is active, false otherwise\n @return true if the converter is active, false otherwise"
            },
            "functionSelector": "22f3e2d4",
            "id": 16781,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isActive",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16762,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3761:8:28"
            },
            "parameters": {
              "id": 16761,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3746:2:28"
            },
            "returnParameters": {
              "id": 16765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16764,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16781,
                  "src": "3779:4:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16763,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3779:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3778:6:28"
            },
            "scope": 18367,
            "src": "3729:136:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 16981,
              "nodeType": "Block",
              "src": "4988:2187:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 16830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 16823,
                              "name": "anchor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9030,
                              "src": "5045:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                "typeString": "contract IConverterAnchor"
                              }
                            },
                            "id": 16824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 23172,
                            "src": "5045:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 16825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5045:14:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 16828,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "5071:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                "typeString": "contract LiquidityPoolV2Converter"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                "typeString": "contract LiquidityPoolV2Converter"
                              }
                            ],
                            "id": 16827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5063:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 16826,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5063:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 16829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5063:13:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5045:31:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f414e43484f525f4e4f545f4f574e4544",
                        "id": 16831,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5078:22:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_177ebf4a5417e29571b85651bfed4f759bbb0c457a65f31f55950233ecfaf584",
                          "typeString": "literal_string \"ERR_ANCHOR_NOT_OWNED\""
                        },
                        "value": "ERR_ANCHOR_NOT_OWNED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_177ebf4a5417e29571b85651bfed4f759bbb0c457a65f31f55950233ecfaf584",
                          "typeString": "literal_string \"ERR_ANCHOR_NOT_OWNED\""
                        }
                      ],
                      "id": 16822,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5037:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5037:64:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16833,
                  "nodeType": "ExpressionStatement",
                  "src": "5037:64:28"
                },
                {
                  "assignments": [
                    16835
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16835,
                      "mutability": "mutable",
                      "name": "oracleWhitelist",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 16981,
                      "src": "5143:26:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWhitelist_$23251",
                        "typeString": "contract IWhitelist"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 16834,
                        "name": "IWhitelist",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 23251,
                        "src": "5143:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWhitelist_$23251",
                          "typeString": "contract IWhitelist"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16841,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 16838,
                            "name": "CHAINLINK_ORACLE_WHITELIST",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21894,
                            "src": "5193:26:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 16837,
                          "name": "addressOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22052,
                          "src": "5183:9:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 16839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5183:37:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16836,
                      "name": "IWhitelist",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23251,
                      "src": "5172:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IWhitelist_$23251_$",
                        "typeString": "type(contract IWhitelist)"
                      }
                    },
                    "id": 16840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5172:49:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IWhitelist_$23251",
                      "typeString": "contract IWhitelist"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5143:78:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 16857,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 16847,
                                  "name": "_primaryReserveOracle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16786,
                                  "src": "5278:21:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                                    "typeString": "contract IChainlinkPriceOracle"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                                    "typeString": "contract IChainlinkPriceOracle"
                                  }
                                ],
                                "id": 16846,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5270:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 16845,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5270:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 16848,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5270:30:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 16843,
                              "name": "oracleWhitelist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16835,
                              "src": "5240:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IWhitelist_$23251",
                                "typeString": "contract IWhitelist"
                              }
                            },
                            "id": 16844,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isWhitelisted",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 23250,
                            "src": "5240:29:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view external returns (bool)"
                            }
                          },
                          "id": 16849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5240:61:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 16854,
                                  "name": "_secondaryReserveOracle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16788,
                                  "src": "5360:23:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                                    "typeString": "contract IChainlinkPriceOracle"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                                    "typeString": "contract IChainlinkPriceOracle"
                                  }
                                ],
                                "id": 16853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5352:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 16852,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5352:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 16855,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5352:32:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 16850,
                              "name": "oracleWhitelist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16835,
                              "src": "5322:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IWhitelist_$23251",
                                "typeString": "contract IWhitelist"
                              }
                            },
                            "id": 16851,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isWhitelisted",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 23250,
                            "src": "5322:29:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view external returns (bool)"
                            }
                          },
                          "id": 16856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5322:63:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5240:145:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f4f5241434c45",
                        "id": 16858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5387:20:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_838cc927fcaf7c7c6b40a2418c9d314e4eaed53a6395fa4bccbb5e6a4666df25",
                          "typeString": "literal_string \"ERR_INVALID_ORACLE\""
                        },
                        "value": "ERR_INVALID_ORACLE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_838cc927fcaf7c7c6b40a2418c9d314e4eaed53a6395fa4bccbb5e6a4666df25",
                          "typeString": "literal_string \"ERR_INVALID_ORACLE\""
                        }
                      ],
                      "id": 16842,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5232:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5232:176:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16860,
                  "nodeType": "ExpressionStatement",
                  "src": "5232:176:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 16861,
                      "name": "createPoolTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18164,
                      "src": "5496:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 16862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5496:18:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16863,
                  "nodeType": "ExpressionStatement",
                  "src": "5496:18:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 16866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 16864,
                      "name": "primaryReserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16667,
                      "src": "5583:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 16865,
                      "name": "_primaryReserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16784,
                      "src": "5605:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "5583:42:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "id": 16867,
                  "nodeType": "ExpressionStatement",
                  "src": "5583:42:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 16872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 16868,
                      "name": "_primaryReserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16784,
                      "src": "5640:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 16869,
                        "name": "reserveTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9036,
                        "src": "5664:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                          "typeString": "contract IERC20Token[] storage ref"
                        }
                      },
                      "id": 16871,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 16870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5678:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5664:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "5640:40:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 16883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 16879,
                        "name": "secondaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16669,
                        "src": "5764:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 16880,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "5788:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 16882,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 16881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5802:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5788:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "src": "5764:40:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "id": 16884,
                    "nodeType": "ExpressionStatement",
                    "src": "5764:40:28"
                  },
                  "id": 16885,
                  "nodeType": "IfStatement",
                  "src": "5636:168:28",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 16877,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 16873,
                        "name": "secondaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16669,
                        "src": "5695:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 16874,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "5719:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 16876,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 16875,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5733:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5719:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "src": "5695:40:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "id": 16878,
                    "nodeType": "ExpressionStatement",
                    "src": "5695:40:28"
                  }
                },
                {
                  "assignments": [
                    16887
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16887,
                      "mutability": "mutable",
                      "name": "customFactory",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 16981,
                      "src": "5892:51:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_LiquidityPoolV2ConverterCustomFactory_$18456",
                        "typeString": "contract LiquidityPoolV2ConverterCustomFactory"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 16886,
                        "name": "LiquidityPoolV2ConverterCustomFactory",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 18456,
                        "src": "5892:37:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_LiquidityPoolV2ConverterCustomFactory_$18456",
                          "typeString": "contract LiquidityPoolV2ConverterCustomFactory"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16902,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 16897,
                                  "name": "converterType",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    16759
                                  ],
                                  "referencedDeclaration": 16759,
                                  "src": "6069:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint16_$",
                                    "typeString": "function () pure returns (uint16)"
                                  }
                                },
                                "id": 16898,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6069:15:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 16893,
                                        "name": "CONVERTER_FACTORY",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21870,
                                        "src": "6033:17:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 16892,
                                      "name": "addressOf",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22052,
                                      "src": "6023:9:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                        "typeString": "function (bytes32) view returns (address)"
                                      }
                                    },
                                    "id": 16894,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6023:28:28",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 16891,
                                  "name": "IConverterFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13389,
                                  "src": "6005:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IConverterFactory_$13389_$",
                                    "typeString": "type(contract IConverterFactory)"
                                  }
                                },
                                "id": 16895,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6005:47:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IConverterFactory_$13389",
                                  "typeString": "contract IConverterFactory"
                                }
                              },
                              "id": 16896,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "customFactories",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13388,
                              "src": "6005:63:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_uint16_$returns$_t_contract$_ITypedConverterCustomFactory_$13688_$",
                                "typeString": "function (uint16) view external returns (contract ITypedConverterCustomFactory)"
                              }
                            },
                            "id": 16899,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6005:80:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ITypedConverterCustomFactory_$13688",
                              "typeString": "contract ITypedConverterCustomFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ITypedConverterCustomFactory_$13688",
                              "typeString": "contract ITypedConverterCustomFactory"
                            }
                          ],
                          "id": 16890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5997:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16889,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5997:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 16900,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5997:89:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16888,
                      "name": "LiquidityPoolV2ConverterCustomFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18456,
                      "src": "5959:37:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_LiquidityPoolV2ConverterCustomFactory_$18456_$",
                        "typeString": "type(contract LiquidityPoolV2ConverterCustomFactory)"
                      }
                    },
                    "id": 16901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5959:128:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LiquidityPoolV2ConverterCustomFactory_$18456",
                      "typeString": "contract LiquidityPoolV2ConverterCustomFactory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5892:195:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 16911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 16903,
                      "name": "priceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16665,
                      "src": "6098:11:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                        "typeString": "contract IPriceOracle"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 16906,
                          "name": "_primaryReserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16784,
                          "src": "6158:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 16907,
                          "name": "secondaryReserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16669,
                          "src": "6193:21:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 16908,
                          "name": "_primaryReserveOracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16786,
                          "src": "6229:21:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                            "typeString": "contract IChainlinkPriceOracle"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 16909,
                          "name": "_secondaryReserveOracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16788,
                          "src": "6265:23:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                            "typeString": "contract IChainlinkPriceOracle"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          {
                            "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                            "typeString": "contract IChainlinkPriceOracle"
                          },
                          {
                            "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                            "typeString": "contract IChainlinkPriceOracle"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 16904,
                          "name": "customFactory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16887,
                          "src": "6112:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_LiquidityPoolV2ConverterCustomFactory_$18456",
                            "typeString": "contract LiquidityPoolV2ConverterCustomFactory"
                          }
                        },
                        "id": 16905,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "createPriceOracle",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18455,
                        "src": "6112:31:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_contract$_IChainlinkPriceOracle_$23155_$_t_contract$_IChainlinkPriceOracle_$23155_$returns$_t_contract$_IPriceOracle_$23225_$",
                          "typeString": "function (contract IERC20Token,contract IERC20Token,contract IChainlinkPriceOracle,contract IChainlinkPriceOracle) external returns (contract IPriceOracle)"
                        }
                      },
                      "id": 16910,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6112:177:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                        "typeString": "contract IPriceOracle"
                      }
                    },
                    "src": "6098:191:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "id": 16912,
                  "nodeType": "ExpressionStatement",
                  "src": "6098:191:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 16916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 16913,
                      "name": "externalRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16683,
                      "src": "6302:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                        "typeString": "struct Fraction storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 16914,
                        "name": "_effectiveTokensRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18186,
                        "src": "6317:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Fraction_$22916_memory_ptr_$",
                          "typeString": "function () view returns (struct Fraction memory)"
                        }
                      },
                      "id": 16915,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6317:22:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                        "typeString": "struct Fraction memory"
                      }
                    },
                    "src": "6302:37:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                      "typeString": "struct Fraction storage ref"
                    }
                  },
                  "id": 16917,
                  "nodeType": "ExpressionStatement",
                  "src": "6302:37:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 16921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 16918,
                      "name": "externalRateUpdateTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16685,
                      "src": "6350:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 16919,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18366,
                        "src": "6375:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 16920,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6375:6:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6350:31:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 16922,
                  "nodeType": "ExpressionStatement",
                  "src": "6350:31:28"
                },
                {
                  "assignments": [
                    16924
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16924,
                      "mutability": "mutable",
                      "name": "primaryReserveStakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 16981,
                      "src": "6509:35:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16923,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6509:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16928,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16926,
                        "name": "primaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16667,
                        "src": "6568:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 16925,
                      "name": "reserveStakedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17023,
                      "src": "6547:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 16927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6547:41:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6509:79:28"
                },
                {
                  "assignments": [
                    16930
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16930,
                      "mutability": "mutable",
                      "name": "primaryReserveBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 16981,
                      "src": "6599:29:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16929,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6599:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16934,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16932,
                        "name": "primaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16667,
                        "src": "6646:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 16931,
                      "name": "reserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9699,
                      "src": "6631:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 16933,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6631:35:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6599:67:28"
                },
                {
                  "assignments": [
                    16936
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16936,
                      "mutability": "mutable",
                      "name": "secondaryReserveBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 16981,
                      "src": "6677:31:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16935,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6677:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16940,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16938,
                        "name": "secondaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16669,
                        "src": "6726:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 16937,
                      "name": "reserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9699,
                      "src": "6711:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 16939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6711:37:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6677:71:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 16941,
                      "name": "primaryReserveStakedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16924,
                      "src": "6765:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 16942,
                      "name": "primaryReserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16930,
                      "src": "6796:21:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6765:52:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 16967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 16963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 16959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 16957,
                            "name": "primaryReserveStakedBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16924,
                            "src": "6978:27:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 16958,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7008:1:28",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6978:31:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 16962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 16960,
                            "name": "primaryReserveBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16930,
                            "src": "7013:21:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 16961,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7037:1:28",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7013:25:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6978:60:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 16964,
                          "name": "secondaryReserveBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16936,
                          "src": "7042:23:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 16965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7068:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7042:27:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "6978:91:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 16972,
                    "nodeType": "IfStatement",
                    "src": "6974:135:28",
                    "trueBody": {
                      "id": 16971,
                      "nodeType": "Block",
                      "src": "7071:38:28",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 16968,
                              "name": "rebalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18205,
                              "src": "7086:9:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                "typeString": "function ()"
                              }
                            },
                            "id": 16969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7086:11:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 16970,
                          "nodeType": "ExpressionStatement",
                          "src": "7086:11:28"
                        }
                      ]
                    }
                  },
                  "id": 16973,
                  "nodeType": "IfStatement",
                  "src": "6761:348:28",
                  "trueBody": {
                    "id": 16956,
                    "nodeType": "Block",
                    "src": "6819:140:28",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 16950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 16946,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 16944,
                              "name": "primaryReserveStakedBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16924,
                              "src": "6838:27:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 16945,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6868:1:28",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "6838:31:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 16949,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 16947,
                              "name": "secondaryReserveBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16936,
                              "src": "6873:23:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 16948,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6899:1:28",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "6873:27:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6838:62:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 16955,
                        "nodeType": "IfStatement",
                        "src": "6834:114:28",
                        "trueBody": {
                          "id": 16954,
                          "nodeType": "Block",
                          "src": "6902:46:28",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 16951,
                                  "name": "rebalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18205,
                                  "src": "6921:9:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                    "typeString": "function ()"
                                  }
                                },
                                "id": 16952,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6921:11:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 16953,
                              "nodeType": "ExpressionStatement",
                              "src": "6921:11:28"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 16975,
                          "name": "converterType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            16759
                          ],
                          "referencedDeclaration": 16759,
                          "src": "7137:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint16_$",
                            "typeString": "function () pure returns (uint16)"
                          }
                        },
                        "id": 16976,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7137:15:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 16977,
                        "name": "anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9030,
                        "src": "7154:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 16978,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7162:4:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 16974,
                      "name": "Activation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9063,
                      "src": "7126:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint16_$_t_contract$_IConverterAnchor_$13349_$_t_bool_$returns$__$",
                        "typeString": "function (uint16,contract IConverterAnchor,bool)"
                      }
                    },
                    "id": 16979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7126:41:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16980,
                  "nodeType": "EmitStatement",
                  "src": "7121:46:28"
                }
              ]
            },
            "documentation": {
              "id": 16782,
              "nodeType": "StructuredDocumentation",
              "src": "3873:625:28",
              "text": " @dev sets the pool's primary reserve token / price oracles and activates the pool\n each oracle must be able to provide the rate for each reserve token\n note that the oracle must be whitelisted prior to the call\n can only be called by the owner while the pool is inactive\n @param _primaryReserveToken     address of the pool's primary reserve token\n @param _primaryReserveOracle    address of a chainlink price oracle for the primary reserve token\n @param _secondaryReserveOracle  address of a chainlink price oracle for the secondary reserve token"
            },
            "functionSelector": "119b90cd",
            "id": 16982,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 16791,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16790,
                  "name": "inactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9151,
                  "src": "4701:8:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4701:8:28"
              },
              {
                "arguments": null,
                "id": 16793,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16792,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "4719:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4719:9:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 16795,
                    "name": "_primaryReserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16784,
                    "src": "4751:20:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 16796,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16794,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "4738:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4738:34:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16800,
                        "name": "_primaryReserveOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16786,
                        "src": "4798:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      ],
                      "id": 16799,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4790:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 16798,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4790:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 16801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4790:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 16802,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16797,
                  "name": "notThis",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22978,
                  "src": "4782:7:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4782:39:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16806,
                        "name": "_secondaryReserveOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16788,
                        "src": "4847:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      ],
                      "id": 16805,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4839:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 16804,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4839:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 16807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4839:32:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 16808,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16803,
                  "name": "notThis",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22978,
                  "src": "4831:7:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4831:41:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16812,
                        "name": "_primaryReserveOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16786,
                        "src": "4903:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      ],
                      "id": 16811,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4895:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 16810,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4895:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 16813,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4895:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 16814,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16809,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22952,
                  "src": "4882:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4882:44:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16818,
                        "name": "_secondaryReserveOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16788,
                        "src": "4957:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      ],
                      "id": 16817,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4949:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 16816,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4949:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 16819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4949:32:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 16820,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16815,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22952,
                  "src": "4936:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4936:46:28"
              }
            ],
            "name": "activate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 16789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16784,
                  "mutability": "mutable",
                  "name": "_primaryReserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16982,
                  "src": "4532:32:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16783,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "4532:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16786,
                  "mutability": "mutable",
                  "name": "_primaryReserveOracle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16982,
                  "src": "4575:43:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                    "typeString": "contract IChainlinkPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16785,
                    "name": "IChainlinkPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 23155,
                    "src": "4575:21:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                      "typeString": "contract IChainlinkPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16788,
                  "mutability": "mutable",
                  "name": "_secondaryReserveOracle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16982,
                  "src": "4629:45:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                    "typeString": "contract IChainlinkPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16787,
                    "name": "IChainlinkPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 23155,
                    "src": "4629:21:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                      "typeString": "contract IChainlinkPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4521:154:28"
            },
            "returnParameters": {
              "id": 16821,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4988:0:28"
            },
            "scope": 18367,
            "src": "4504:2671:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17006,
              "nodeType": "Block",
              "src": "7471:233:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 16993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 16991,
                          "name": "_oracleDeviationFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16985,
                          "src": "7490:19:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 16992,
                          "name": "PPM_RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9007,
                          "src": "7513:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "7490:37:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f4f5241434c455f444556494154494f4e5f464545",
                        "id": 16994,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7529:34:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f9363eee098ac664b67b829736fb5ba7ccaf776da9324eed6c3da55aa01386f5",
                          "typeString": "literal_string \"ERR_INVALID_ORACLE_DEVIATION_FEE\""
                        },
                        "value": "ERR_INVALID_ORACLE_DEVIATION_FEE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f9363eee098ac664b67b829736fb5ba7ccaf776da9324eed6c3da55aa01386f5",
                          "typeString": "literal_string \"ERR_INVALID_ORACLE_DEVIATION_FEE\""
                        }
                      ],
                      "id": 16990,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7482:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7482:82:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16996,
                  "nodeType": "ExpressionStatement",
                  "src": "7482:82:28"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16998,
                        "name": "oracleDeviationFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16695,
                        "src": "7605:18:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 16999,
                        "name": "_oracleDeviationFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16985,
                        "src": "7625:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 16997,
                      "name": "OracleDeviationFeeUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16702,
                      "src": "7580:24:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_uint32_$returns$__$",
                        "typeString": "function (uint32,uint32)"
                      }
                    },
                    "id": 17000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7580:65:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17001,
                  "nodeType": "EmitStatement",
                  "src": "7575:70:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 17002,
                      "name": "oracleDeviationFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16695,
                      "src": "7656:18:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 17003,
                      "name": "_oracleDeviationFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16985,
                      "src": "7677:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "7656:40:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 17005,
                  "nodeType": "ExpressionStatement",
                  "src": "7656:40:28"
                }
              ]
            },
            "documentation": {
              "id": 16983,
              "nodeType": "StructuredDocumentation",
              "src": "7183:206:28",
              "text": " @dev updates the current oracle deviation fee\n can only be called by the contract owner\n @param _oracleDeviationFee new oracle deviation fee, represented in ppm"
            },
            "functionSelector": "ddd9abbf",
            "id": 17007,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 16988,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16987,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "7461:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7461:9:28"
              }
            ],
            "name": "setOracleDeviationFee",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 16986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16985,
                  "mutability": "mutable",
                  "name": "_oracleDeviationFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17007,
                  "src": "7426:26:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 16984,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7426:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7425:28:28"
            },
            "returnParameters": {
              "id": 16989,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7471:0:28"
            },
            "scope": 18367,
            "src": "7395:309:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17022,
              "nodeType": "Block",
              "src": "8056:55:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17018,
                      "name": "stakedBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16673,
                      "src": "8074:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20Token => uint256)"
                      }
                    },
                    "id": 17020,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17019,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17010,
                      "src": "8089:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8074:29:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17017,
                  "id": 17021,
                  "nodeType": "Return",
                  "src": "8067:36:28"
                }
              ]
            },
            "documentation": {
              "id": 17008,
              "nodeType": "StructuredDocumentation",
              "src": "7712:182:28",
              "text": " @dev returns the staked balance of a given reserve token\n @param _reserveToken    reserve token address\n @return staked balance"
            },
            "functionSelector": "005e319c",
            "id": 17023,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17013,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17010,
                    "src": "8009:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17014,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17012,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "7996:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7996:27:28"
              }
            ],
            "name": "reserveStakedBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17011,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17010,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17023,
                  "src": "7930:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17009,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "7930:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7929:27:28"
            },
            "returnParameters": {
              "id": 17017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17016,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17023,
                  "src": "8042:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17015,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8042:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8041:9:28"
            },
            "scope": 18367,
            "src": "7900:211:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17038,
              "nodeType": "Block",
              "src": "8471:57:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17035,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17026,
                        "src": "8506:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17034,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "8489:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 17036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8489:31:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17033,
                  "id": 17037,
                  "nodeType": "Return",
                  "src": "8482:38:28"
                }
              ]
            },
            "documentation": {
              "id": 17024,
              "nodeType": "StructuredDocumentation",
              "src": "8119:187:28",
              "text": " @dev returns the amplified balance of a given reserve token\n @param _reserveToken   reserve token address\n @return amplified balance"
            },
            "functionSelector": "2bd3c107",
            "id": 17039,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17029,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17026,
                    "src": "8424:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17030,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17028,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "8411:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8411:27:28"
              }
            ],
            "name": "reserveAmplifiedBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17026,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17039,
                  "src": "8345:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17025,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "8345:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8344:27:28"
            },
            "returnParameters": {
              "id": 17033,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17032,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17039,
                  "src": "8457:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17031,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8457:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8456:9:28"
            },
            "scope": 18367,
            "src": "8312:216:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17061,
              "nodeType": "Block",
              "src": "8999:59:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17055,
                        "name": "stakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16673,
                        "src": "9010:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17057,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17056,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17042,
                        "src": "9025:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9010:29:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 17058,
                      "name": "_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17044,
                      "src": "9042:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9010:40:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17060,
                  "nodeType": "ExpressionStatement",
                  "src": "9010:40:28"
                }
              ]
            },
            "documentation": {
              "id": 17040,
              "nodeType": "StructuredDocumentation",
              "src": "8536:268:28",
              "text": " @dev sets the reserve's staked balance\n can only be called by the upgrader contract while the upgrader is the owner\n @param _reserveToken    reserve token address\n @param _balance         new reserve staked balance"
            },
            "functionSelector": "bf7da6ba",
            "id": 17062,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17047,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17046,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "8913:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8913:9:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17049,
                    "name": "CONVERTER_UPGRADER",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21876,
                    "src": "8937:18:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 17050,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17048,
                  "name": "only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21911,
                  "src": "8932:4:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8932:24:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17052,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17042,
                    "src": "8979:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17053,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17051,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "8966:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8966:27:28"
              }
            ],
            "name": "setReserveStakedBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17042,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17062,
                  "src": "8843:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17041,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "8843:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17044,
                  "mutability": "mutable",
                  "name": "_balance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17062,
                  "src": "8870:16:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17043,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8870:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8842:45:28"
            },
            "returnParameters": {
              "id": 17054,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8999:0:28"
            },
            "scope": 18367,
            "src": "8810:248:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17088,
              "nodeType": "Block",
              "src": "9526:156:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17072,
                        "name": "maxStakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16689,
                        "src": "9537:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17076,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17073,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "9555:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17075,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 17074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9569:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9555:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9537:35:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 17077,
                      "name": "_reserve1MaxStakedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17065,
                      "src": "9575:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9537:63:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17079,
                  "nodeType": "ExpressionStatement",
                  "src": "9537:63:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17080,
                        "name": "maxStakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16689,
                        "src": "9611:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17084,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17081,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "9629:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17083,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 17082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9643:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9629:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9611:35:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 17085,
                      "name": "_reserve2MaxStakedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17067,
                      "src": "9649:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9611:63:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17087,
                  "nodeType": "ExpressionStatement",
                  "src": "9611:63:28"
                }
              ]
            },
            "documentation": {
              "id": 17063,
              "nodeType": "StructuredDocumentation",
              "src": "9066:337:28",
              "text": " @dev sets the max staked balance for both reserves\n available as a temporary mechanism during the beta\n can only be called by the owner\n @param _reserve1MaxStakedBalance    max staked balance for reserve 1\n @param _reserve2MaxStakedBalance    max staked balance for reserve 2"
            },
            "functionSelector": "46749468",
            "id": 17089,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17070,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17069,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "9516:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9516:9:28"
              }
            ],
            "name": "setMaxStakedBalances",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17065,
                  "mutability": "mutable",
                  "name": "_reserve1MaxStakedBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17089,
                  "src": "9439:33:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17064,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9439:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17067,
                  "mutability": "mutable",
                  "name": "_reserve2MaxStakedBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17089,
                  "src": "9474:33:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17066,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9474:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9438:70:28"
            },
            "returnParameters": {
              "id": 17071,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9526:0:28"
            },
            "scope": 18367,
            "src": "9409:273:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17099,
              "nodeType": "Block",
              "src": "9965:50:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 17095,
                      "name": "maxStakedBalanceEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16692,
                      "src": "9976:23:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 17096,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10002:5:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "9976:31:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 17098,
                  "nodeType": "ExpressionStatement",
                  "src": "9976:31:28"
                }
              ]
            },
            "documentation": {
              "id": 17090,
              "nodeType": "StructuredDocumentation",
              "src": "9690:216:28",
              "text": " @dev disables the max staked balance mechanism\n available as a temporary mechanism during the beta\n once disabled, it cannot be re-enabled\n can only be called by the owner"
            },
            "functionSelector": "16912f96",
            "id": 17100,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17093,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17092,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "9955:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9955:9:28"
              }
            ],
            "name": "disableMaxStakedBalances",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17091,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9945:2:28"
            },
            "returnParameters": {
              "id": 17094,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9965:0:28"
            },
            "scope": 18367,
            "src": "9912:103:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17112,
              "nodeType": "Block",
              "src": "10303:61:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17108,
                      "name": "reservesToPoolTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16677,
                      "src": "10321:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
                        "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
                      }
                    },
                    "id": 17110,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17109,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17103,
                      "src": "10342:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10321:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "functionReturnParameters": 17107,
                  "id": 17111,
                  "nodeType": "Return",
                  "src": "10314:42:28"
                }
              ]
            },
            "documentation": {
              "id": 17101,
              "nodeType": "StructuredDocumentation",
              "src": "10023:194:28",
              "text": " @dev returns the pool token address by the reserve token address\n @param _reserveToken    reserve token address\n @return pool token address"
            },
            "functionSelector": "5768adcf",
            "id": 17113,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "poolToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17103,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17113,
                  "src": "10242:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17102,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "10242:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10241:27:28"
            },
            "returnParameters": {
              "id": 17107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17106,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17113,
                  "src": "10290:11:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17105,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "10290:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10289:13:28"
            },
            "scope": 18367,
            "src": "10223:141:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17153,
              "nodeType": "Block",
              "src": "10666:530:28",
              "statements": [
                {
                  "assignments": [
                    17122
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17122,
                      "mutability": "mutable",
                      "name": "poolTokenSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17153,
                      "src": "10715:23:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17121,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10715:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17126,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17123,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17116,
                        "src": "10741:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "id": 17124,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21415,
                      "src": "10741:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 17125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10741:24:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10715:50:28"
                },
                {
                  "assignments": [
                    17128
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17128,
                      "mutability": "mutable",
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17153,
                      "src": "10876:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17127,
                        "name": "IERC20Token",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21461,
                        "src": "10876:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17132,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17129,
                      "name": "poolTokensToReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16681,
                      "src": "10903:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                        "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
                      }
                    },
                    "id": 17131,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17130,
                      "name": "_poolToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17116,
                      "src": "10924:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ISmartToken_$21516",
                        "typeString": "contract ISmartToken"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10903:32:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10876:59:28"
                },
                {
                  "assignments": [
                    17134
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17134,
                      "mutability": "mutable",
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17153,
                      "src": "10946:15:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17133,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10946:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17138,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17136,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17128,
                        "src": "10979:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17135,
                      "name": "reserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9699,
                      "src": "10964:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 17137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10964:28:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10946:46:28"
                },
                {
                  "assignments": [
                    17140
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17140,
                      "mutability": "mutable",
                      "name": "stakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17153,
                      "src": "11003:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17139,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11003:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17144,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17141,
                      "name": "stakedBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16673,
                      "src": "11027:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20Token => uint256)"
                      }
                    },
                    "id": 17143,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17142,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17128,
                      "src": "11042:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11027:28:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11003:52:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17150,
                        "name": "stakedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17140,
                        "src": "11174:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17147,
                            "name": "poolTokenSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17122,
                            "src": "11153:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 17145,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17134,
                            "src": "11141:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 17146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22661,
                          "src": "11141:11:28",
                          "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": 17148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11141:28:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 17149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22687,
                      "src": "11141:32:28",
                      "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": 17151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11141:47:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17120,
                  "id": 17152,
                  "nodeType": "Return",
                  "src": "11134:54:28"
                }
              ]
            },
            "documentation": {
              "id": 17114,
              "nodeType": "StructuredDocumentation",
              "src": "10372:208:28",
              "text": " @dev returns the maximum number of pool tokens that can currently be liquidated\n @param _poolToken   address of the pool token\n @return liquidation limit"
            },
            "functionSelector": "2bf0c985",
            "id": 17154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "liquidationLimit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17117,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17116,
                  "mutability": "mutable",
                  "name": "_poolToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17154,
                  "src": "10612:22:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17115,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "10612:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10611:24:28"
            },
            "returnParameters": {
              "id": 17120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17119,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17154,
                  "src": "10657:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17118,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10657:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10656:9:28"
            },
            "scope": 18367,
            "src": "10586:610:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9664
            ],
            "body": {
              "id": 17180,
              "nodeType": "Block",
              "src": "11613:190:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 17169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 17166,
                            "name": "reserveTokenCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "11698:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
                              "typeString": "function () view returns (uint16)"
                            }
                          },
                          "id": 17167,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11698:19:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "32",
                          "id": 17168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11720:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "src": "11698:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f524553455256455f434f554e54",
                        "id": 17170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11723:27:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        },
                        "value": "ERR_INVALID_RESERVE_COUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        }
                      ],
                      "id": 17165,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11690:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11690:61:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17172,
                  "nodeType": "ExpressionStatement",
                  "src": "11690:61:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17176,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17157,
                        "src": "11779:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17177,
                        "name": "_weight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17159,
                        "src": "11787:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17173,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "11762:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_LiquidityPoolV2Converter_$18367",
                          "typeString": "contract super LiquidityPoolV2Converter"
                        }
                      },
                      "id": 17175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addReserve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9664,
                      "src": "11762:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_uint32_$returns$__$",
                        "typeString": "function (contract IERC20Token,uint32)"
                      }
                    },
                    "id": 17178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11762:33:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17179,
                  "nodeType": "ExpressionStatement",
                  "src": "11762:33:28"
                }
              ]
            },
            "documentation": {
              "id": 17155,
              "nodeType": "StructuredDocumentation",
              "src": "11204:321:28",
              "text": " @dev defines a new reserve token for the converter\n can only be called by the owner while the converter is inactive and\n 2 reserves aren't defined yet\n @param _token   address of the reserve token\n @param _weight  reserve weight, represented in ppm, 1-1000000"
            },
            "functionSelector": "6a49d2c4",
            "id": 17181,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17163,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17162,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "11603:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11603:9:28"
              }
            ],
            "name": "addReserve",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 17161,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11594:8:28"
            },
            "parameters": {
              "id": 17160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17157,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17181,
                  "src": "11551:18:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17156,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "11551:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17159,
                  "mutability": "mutable",
                  "name": "_weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17181,
                  "src": "11571:14:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 17158,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11571:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11550:36:28"
            },
            "returnParameters": {
              "id": 17164,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11613:0:28"
            },
            "scope": 18367,
            "src": "11531:272:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17200,
              "nodeType": "Block",
              "src": "12135:98:28",
              "statements": [
                {
                  "assignments": [
                    17190
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17190,
                      "mutability": "mutable",
                      "name": "rate",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17200,
                      "src": "12146:20:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                        "typeString": "struct Fraction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17189,
                        "name": "Fraction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22916,
                        "src": "12146:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                          "typeString": "struct Fraction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17193,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17191,
                      "name": "_effectiveTokensRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18186,
                      "src": "12169:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Fraction_$22916_memory_ptr_$",
                        "typeString": "function () view returns (struct Fraction memory)"
                      }
                    },
                    "id": 17192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12169:22:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                      "typeString": "struct Fraction memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12146:45:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17194,
                          "name": "rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17190,
                          "src": "12210:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                            "typeString": "struct Fraction memory"
                          }
                        },
                        "id": 17195,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "n",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22913,
                        "src": "12210:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17196,
                          "name": "rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17190,
                          "src": "12218:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                            "typeString": "struct Fraction memory"
                          }
                        },
                        "id": 17197,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "d",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22915,
                        "src": "12218:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17198,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "12209:16:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17188,
                  "id": 17199,
                  "nodeType": "Return",
                  "src": "12202:23:28"
                }
              ]
            },
            "documentation": {
              "id": 17182,
              "nodeType": "StructuredDocumentation",
              "src": "11811:248:28",
              "text": " @dev returns the effective rate of 1 primary token in secondary tokens\n @return rate of 1 primary token in secondary tokens (numerator)\n @return rate of 1 primary token in secondary tokens (denominator)"
            },
            "functionSelector": "db2830a4",
            "id": 17201,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "effectiveTokensRate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17183,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12093:2:28"
            },
            "returnParameters": {
              "id": 17188,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17185,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17201,
                  "src": "12117:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17184,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12117:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17187,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17201,
                  "src": "12126:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17186,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12126:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12116:18:28"
            },
            "scope": 18367,
            "src": "12065:168:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17237,
              "nodeType": "Block",
              "src": "12466:370:28",
              "statements": [
                {
                  "assignments": [
                    17210
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17210,
                      "mutability": "mutable",
                      "name": "rate",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17237,
                      "src": "12477:20:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                        "typeString": "struct Fraction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17209,
                        "name": "Fraction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22916,
                        "src": "12477:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                          "typeString": "struct Fraction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17213,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17211,
                      "name": "_effectiveTokensRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18186,
                      "src": "12500:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Fraction_$22916_memory_ptr_$",
                        "typeString": "function () view returns (struct Fraction memory)"
                      }
                    },
                    "id": 17212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12500:22:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                      "typeString": "struct Fraction memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12477:45:28"
                },
                {
                  "assignments": [
                    17215,
                    17217
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17215,
                      "mutability": "mutable",
                      "name": "primaryReserveWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17237,
                      "src": "12534:27:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17214,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12534:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 17217,
                      "mutability": "mutable",
                      "name": "secondaryReserveWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17237,
                      "src": "12563:29:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17216,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12563:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17221,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17219,
                        "name": "rate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17210,
                        "src": "12620:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                          "typeString": "struct Fraction memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                          "typeString": "struct Fraction memory"
                        }
                      ],
                      "id": 17218,
                      "name": "effectiveReserveWeights",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17238,
                        18276
                      ],
                      "referencedDeclaration": 18276,
                      "src": "12596:23:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Fraction_$22916_memory_ptr_$returns$_t_uint32_$_t_uint32_$",
                        "typeString": "function (struct Fraction memory) view returns (uint32,uint32)"
                      }
                    },
                    "id": 17220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12596:29:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                      "typeString": "tuple(uint32,uint32)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12533:92:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17222,
                      "name": "primaryReserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16667,
                      "src": "12642:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17223,
                        "name": "reserveTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9036,
                        "src": "12665:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                          "typeString": "contract IERC20Token[] storage ref"
                        }
                      },
                      "id": 17225,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12679:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "12665:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "12642:39:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17232,
                  "nodeType": "IfStatement",
                  "src": "12638:125:28",
                  "trueBody": {
                    "id": 17231,
                    "nodeType": "Block",
                    "src": "12683:80:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 17227,
                              "name": "primaryReserveWeight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17215,
                              "src": "12706:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 17228,
                              "name": "secondaryReserveWeight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17217,
                              "src": "12728:22:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "id": 17229,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "12705:46:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                            "typeString": "tuple(uint32,uint32)"
                          }
                        },
                        "functionReturnParameters": 17208,
                        "id": 17230,
                        "nodeType": "Return",
                        "src": "12698:53:28"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 17233,
                        "name": "secondaryReserveWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17217,
                        "src": "12783:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17234,
                        "name": "primaryReserveWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17215,
                        "src": "12807:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "id": 17235,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "12782:46:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                      "typeString": "tuple(uint32,uint32)"
                    }
                  },
                  "functionReturnParameters": 17208,
                  "id": 17236,
                  "nodeType": "Return",
                  "src": "12775:53:28"
                }
              ]
            },
            "documentation": {
              "id": 17202,
              "nodeType": "StructuredDocumentation",
              "src": "12241:145:28",
              "text": " @dev returns the effective reserve tokens weights\n @return reserve1 weight\n @return reserve2 weight"
            },
            "functionSelector": "ec2240f5",
            "id": 17238,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "effectiveReserveWeights",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17203,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12424:2:28"
            },
            "returnParameters": {
              "id": 17208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17205,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17238,
                  "src": "12448:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17204,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12448:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17207,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17238,
                  "src": "12457:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17206,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12457:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12447:18:28"
            },
            "scope": 18367,
            "src": "12392:444:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9256
            ],
            "body": {
              "id": 17345,
              "nodeType": "Block",
              "src": "13545:1311:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        "id": 17264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 17262,
                          "name": "_sourceToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17241,
                          "src": "13591:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 17263,
                          "name": "_targetToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17243,
                          "src": "13607:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "src": "13591:28:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f53414d455f534f555243455f544152474554",
                        "id": 17265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13621:24:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
                          "typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
                        },
                        "value": "ERR_SAME_SOURCE_TARGET"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
                          "typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
                        }
                      ],
                      "id": 17261,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13583:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13583:63:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17267,
                  "nodeType": "ExpressionStatement",
                  "src": "13583:63:28"
                },
                {
                  "assignments": [
                    17269
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17269,
                      "mutability": "mutable",
                      "name": "sourceTokenWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17345,
                      "src": "13659:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17268,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13659:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17270,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13659:24:28"
                },
                {
                  "assignments": [
                    17272
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17272,
                      "mutability": "mutable",
                      "name": "targetTokenWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17345,
                      "src": "13694:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17271,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13694:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17273,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13694:24:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 17277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17274,
                      "name": "externalRateUpdateTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16685,
                      "src": "13850:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 17275,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18366,
                        "src": "13876:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 17276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13876:6:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13850:32:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 17327,
                    "nodeType": "Block",
                    "src": "14044:527:28",
                    "statements": [
                      {
                        "assignments": [
                          17293
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17293,
                            "mutability": "mutable",
                            "name": "rate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 17327,
                            "src": "14059:20:28",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                              "typeString": "struct Fraction"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 17292,
                              "name": "Fraction",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 22916,
                              "src": "14059:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                                "typeString": "struct Fraction"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17296,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 17294,
                            "name": "_effectiveTokensRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18186,
                            "src": "14082:20:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Fraction_$22916_memory_ptr_$",
                              "typeString": "function () view returns (struct Fraction memory)"
                            }
                          },
                          "id": 17295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14082:22:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                            "typeString": "struct Fraction memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14059:45:28"
                      },
                      {
                        "assignments": [
                          17298,
                          17300
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17298,
                            "mutability": "mutable",
                            "name": "primaryReserveWeight",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 17327,
                            "src": "14120:27:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 17297,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "14120:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 17300,
                            "mutability": "mutable",
                            "name": "secondaryReserveWeight",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 17327,
                            "src": "14149:29:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 17299,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "14149:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17304,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17302,
                              "name": "rate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17293,
                              "src": "14206:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                                "typeString": "struct Fraction memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                                "typeString": "struct Fraction memory"
                              }
                            ],
                            "id": 17301,
                            "name": "effectiveReserveWeights",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              17238,
                              18276
                            ],
                            "referencedDeclaration": 18276,
                            "src": "14182:23:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Fraction_$22916_memory_ptr_$returns$_t_uint32_$_t_uint32_$",
                              "typeString": "function (struct Fraction memory) view returns (uint32,uint32)"
                            }
                          },
                          "id": 17303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14182:29:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                            "typeString": "tuple(uint32,uint32)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14119:92:28"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          "id": 17307,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 17305,
                            "name": "_sourceToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17241,
                            "src": "14232:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 17306,
                            "name": "primaryReserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16667,
                            "src": "14248:19:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "src": "14232:35:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 17325,
                          "nodeType": "Block",
                          "src": "14424:136:28",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 17319,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 17317,
                                  "name": "sourceTokenWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17269,
                                  "src": "14443:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 17318,
                                  "name": "secondaryReserveWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17300,
                                  "src": "14463:22:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "14443:42:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 17320,
                              "nodeType": "ExpressionStatement",
                              "src": "14443:42:28"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 17323,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 17321,
                                  "name": "targetTokenWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17272,
                                  "src": "14504:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 17322,
                                  "name": "primaryReserveWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17298,
                                  "src": "14524:20:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "14504:40:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 17324,
                              "nodeType": "ExpressionStatement",
                              "src": "14504:40:28"
                            }
                          ]
                        },
                        "id": 17326,
                        "nodeType": "IfStatement",
                        "src": "14228:332:28",
                        "trueBody": {
                          "id": 17316,
                          "nodeType": "Block",
                          "src": "14269:136:28",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 17310,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 17308,
                                  "name": "sourceTokenWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17269,
                                  "src": "14288:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 17309,
                                  "name": "primaryReserveWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17298,
                                  "src": "14308:20:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "14288:40:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 17311,
                              "nodeType": "ExpressionStatement",
                              "src": "14288:40:28"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 17314,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 17312,
                                  "name": "targetTokenWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17272,
                                  "src": "14347:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 17313,
                                  "name": "secondaryReserveWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17300,
                                  "src": "14367:22:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "14347:42:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 17315,
                              "nodeType": "ExpressionStatement",
                              "src": "14347:42:28"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 17328,
                  "nodeType": "IfStatement",
                  "src": "13846:725:28",
                  "trueBody": {
                    "id": 17291,
                    "nodeType": "Block",
                    "src": "13884:145:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17278,
                            "name": "sourceTokenWeight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17269,
                            "src": "13899:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 17279,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9040,
                                "src": "13919:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                  "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                }
                              },
                              "id": 17281,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 17280,
                                "name": "_sourceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17241,
                                "src": "13928:12:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                  "typeString": "contract IERC20Token"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13919:22:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                "typeString": "struct ConverterBase.Reserve storage ref"
                              }
                            },
                            "id": 17282,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "weight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9016,
                            "src": "13919:29:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "13899:49:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 17284,
                        "nodeType": "ExpressionStatement",
                        "src": "13899:49:28"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17285,
                            "name": "targetTokenWeight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17272,
                            "src": "13963:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "id": 17288,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 17286,
                              "name": "PPM_RESOLUTION",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9007,
                              "src": "13983:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 17287,
                              "name": "sourceTokenWeight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17269,
                              "src": "14000:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "src": "13983:34:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "13963:54:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 17290,
                        "nodeType": "ExpressionStatement",
                        "src": "13963:54:28"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    17330,
                    null,
                    17332
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17330,
                      "mutability": "mutable",
                      "name": "targetAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17345,
                      "src": "14678:20:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17329,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14678:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null,
                    {
                      "constant": false,
                      "id": 17332,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17345,
                      "src": "14702:11:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17331,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14702:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17340,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17334,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17241,
                        "src": "14737:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17335,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17243,
                        "src": "14751:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17336,
                        "name": "sourceTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17269,
                        "src": "14765:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17337,
                        "name": "targetTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17272,
                        "src": "14784:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17338,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17245,
                        "src": "14803:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17333,
                      "name": "targetAmountAndFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18083,
                      "src": "14717:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint32_$_t_uint32_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint32,uint32,uint256) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 17339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14717:94:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14677:134:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 17341,
                        "name": "targetAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17330,
                        "src": "14830:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17342,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17332,
                        "src": "14844:3:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17343,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "14829:19:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17260,
                  "id": 17344,
                  "nodeType": "Return",
                  "src": "14822:26:28"
                }
              ]
            },
            "documentation": {
              "id": 17239,
              "nodeType": "StructuredDocumentation",
              "src": "12844:421:28",
              "text": " @dev returns the expected target amount of converting one reserve to another along with the fee\n @param _sourceToken contract address of the source reserve token\n @param _targetToken contract address of the target reserve token\n @param _amount      amount of tokens received from the user\n @return expected target amount\n @return expected fee"
            },
            "functionSelector": "af94b8d8",
            "id": 17346,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17249,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17248,
                  "name": "active",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9134,
                  "src": "13425:6:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13425:6:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17251,
                    "name": "_sourceToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17241,
                    "src": "13454:12:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17252,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17250,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "13441:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13441:26:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17254,
                    "name": "_targetToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17243,
                    "src": "13490:12:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17255,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17253,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "13477:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13477:26:28"
              }
            ],
            "name": "targetAmountAndFee",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 17247,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13407:8:28"
            },
            "parameters": {
              "id": 17246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17241,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17346,
                  "src": "13299:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17240,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "13299:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17243,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17346,
                  "src": "13325:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17242,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "13325:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17245,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17346,
                  "src": "13351:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13351:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13298:69:28"
            },
            "returnParameters": {
              "id": 17260,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17257,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17346,
                  "src": "13522:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17256,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13522:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17259,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17346,
                  "src": "13531:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17258,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13531:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13521:18:28"
            },
            "scope": 18367,
            "src": "13271:1585:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9789
            ],
            "body": {
              "id": 17536,
              "nodeType": "Block",
              "src": "15730:2450:28",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 17374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17371,
                      "name": "externalRateUpdateTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16685,
                      "src": "15806:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 17372,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18366,
                        "src": "15831:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 17373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15831:6:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15806:31:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17389,
                  "nodeType": "IfStatement",
                  "src": "15802:173:28",
                  "trueBody": {
                    "id": 17388,
                    "nodeType": "Block",
                    "src": "15839:136:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17375,
                            "name": "externalRateUpdateTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16685,
                            "src": "15854:22:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 17376,
                              "name": "time",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18366,
                              "src": "15879:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 17377,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15879:6:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15854:31:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17379,
                        "nodeType": "ExpressionStatement",
                        "src": "15854:31:28"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17380,
                            "name": "externalRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16683,
                            "src": "15900:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                              "typeString": "struct Fraction storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 17381,
                              "name": "_effectiveTokensRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18186,
                              "src": "15915:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Fraction_$22916_memory_ptr_$",
                                "typeString": "function () view returns (struct Fraction memory)"
                              }
                            },
                            "id": 17382,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15915:22:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                              "typeString": "struct Fraction memory"
                            }
                          },
                          "src": "15900:37:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                            "typeString": "struct Fraction storage ref"
                          }
                        },
                        "id": 17384,
                        "nodeType": "ExpressionStatement",
                        "src": "15900:37:28"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 17385,
                            "name": "rebalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18205,
                            "src": "15952:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 17386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15952:11:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 17387,
                        "nodeType": "ExpressionStatement",
                        "src": "15952:11:28"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    17391
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17391,
                      "mutability": "mutable",
                      "name": "sourceTokenWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "15987:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17390,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "15987:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17396,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17392,
                        "name": "reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9040,
                        "src": "16014:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                          "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                        }
                      },
                      "id": 17394,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17393,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17349,
                        "src": "16023:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16014:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                        "typeString": "struct ConverterBase.Reserve storage ref"
                      }
                    },
                    "id": 17395,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "weight",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9016,
                    "src": "16014:29:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15987:56:28"
                },
                {
                  "assignments": [
                    17398
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17398,
                      "mutability": "mutable",
                      "name": "targetTokenWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "16054:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17397,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16054:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17402,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 17401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17399,
                      "name": "PPM_RESOLUTION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9007,
                      "src": "16081:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17400,
                      "name": "sourceTokenWeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17391,
                      "src": "16098:17:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "16081:34:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16054:61:28"
                },
                {
                  "assignments": [
                    17404,
                    17406,
                    17408
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17404,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "16177:14:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17403,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16177:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 17406,
                      "mutability": "mutable",
                      "name": "standardFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "16193:19:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17405,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16193:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 17408,
                      "mutability": "mutable",
                      "name": "totalFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "16214:16:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17407,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16214:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17416,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17410,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17349,
                        "src": "16254:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17411,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17351,
                        "src": "16268:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17412,
                        "name": "sourceTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17391,
                        "src": "16282:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17413,
                        "name": "targetTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17398,
                        "src": "16301:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17414,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17353,
                        "src": "16320:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17409,
                      "name": "targetAmountAndFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18083,
                      "src": "16234:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint32_$_t_uint32_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint32,uint32,uint256) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 17415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16234:94:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16176:152:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 17420,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 17418,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17404,
                          "src": "16409:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 17419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16419:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "16409:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f5a45524f5f5441524745545f414d4f554e54",
                        "id": 17421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16422:24:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_29cb0846c2d5a859f661a5b4c4a8be47a80ca27c24af6f007bda101871b53e03",
                          "typeString": "literal_string \"ERR_ZERO_TARGET_AMOUNT\""
                        },
                        "value": "ERR_ZERO_TARGET_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_29cb0846c2d5a859f661a5b4c4a8be47a80ca27c24af6f007bda101871b53e03",
                          "typeString": "literal_string \"ERR_ZERO_TARGET_AMOUNT\""
                        }
                      ],
                      "id": 17417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "16401:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16401:46:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17423,
                  "nodeType": "ExpressionStatement",
                  "src": "16401:46:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17424,
                      "name": "_sourceToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17349,
                      "src": "16527:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17425,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "16543:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "16527:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 17454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 17439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 17436,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "16670:3:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 17437,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "16670:9:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 17438,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16683:1:28",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "16670:14:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 17453,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 17449,
                                      "name": "_sourceToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17349,
                                      "src": "16745:12:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                        "typeString": "contract IERC20Token"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                        "typeString": "contract IERC20Token"
                                      }
                                    ],
                                    "id": 17448,
                                    "name": "reserveBalance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9699,
                                    "src": "16730:14:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                                      "typeString": "function (contract IERC20Token) view returns (uint256)"
                                    }
                                  },
                                  "id": 17450,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16730:28:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 17444,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "16719:4:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                            "typeString": "contract LiquidityPoolV2Converter"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                            "typeString": "contract LiquidityPoolV2Converter"
                                          }
                                        ],
                                        "id": 17443,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "16711:7:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 17442,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "16711:7:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      },
                                      "id": 17445,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "16711:13:28",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 17440,
                                      "name": "_sourceToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17349,
                                      "src": "16688:12:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                        "typeString": "contract IERC20Token"
                                      }
                                    },
                                    "id": 17441,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balanceOf",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21422,
                                    "src": "16688:22:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) view external returns (uint256)"
                                    }
                                  },
                                  "id": 17446,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16688:37:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 17447,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22627,
                                "src": "16688:41:28",
                                "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": 17451,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16688:71:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 17452,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17353,
                              "src": "16763:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "16688:82:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "16670:100:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4552525f494e56414c49445f414d4f554e54",
                          "id": 17455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16772:20:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c44007bfe4e704be0ed1393660a827b4f88825f4b6fe1bc10cd38fc3fcb7d839",
                            "typeString": "literal_string \"ERR_INVALID_AMOUNT\""
                          },
                          "value": "ERR_INVALID_AMOUNT"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_c44007bfe4e704be0ed1393660a827b4f88825f4b6fe1bc10cd38fc3fcb7d839",
                            "typeString": "literal_string \"ERR_INVALID_AMOUNT\""
                          }
                        ],
                        "id": 17435,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          -18,
                          -18
                        ],
                        "referencedDeclaration": -18,
                        "src": "16662:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 17456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16662:131:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17457,
                    "nodeType": "ExpressionStatement",
                    "src": "16662:131:28"
                  },
                  "id": 17458,
                  "nodeType": "IfStatement",
                  "src": "16523:270:28",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 17431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 17428,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "16585:3:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 17429,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "16585:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 17430,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17353,
                            "src": "16598:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16585:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4552525f4554485f414d4f554e545f4d49534d41544348",
                          "id": 17432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16607:25:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_b27c160ac497b67c4fef6b5554e0b1a41f3c9b44e4bd8482662df760b76c093b",
                            "typeString": "literal_string \"ERR_ETH_AMOUNT_MISMATCH\""
                          },
                          "value": "ERR_ETH_AMOUNT_MISMATCH"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_b27c160ac497b67c4fef6b5554e0b1a41f3c9b44e4bd8482662df760b76c093b",
                            "typeString": "literal_string \"ERR_ETH_AMOUNT_MISMATCH\""
                          }
                        ],
                        "id": 17427,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          -18,
                          -18
                        ],
                        "referencedDeclaration": -18,
                        "src": "16577:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 17433,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16577:56:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17434,
                    "nodeType": "ExpressionStatement",
                    "src": "16577:56:28"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17460,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17349,
                        "src": "16863:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17459,
                      "name": "syncReserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9844,
                      "src": "16844:18:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$returns$__$",
                        "typeString": "function (contract IERC20Token)"
                      }
                    },
                    "id": 17461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16844:32:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17462,
                  "nodeType": "ExpressionStatement",
                  "src": "16844:32:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17463,
                          "name": "reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9040,
                          "src": "16887:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                            "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                          }
                        },
                        "id": 17465,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17464,
                          "name": "_targetToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17351,
                          "src": "16896:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16887:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                          "typeString": "struct ConverterBase.Reserve storage ref"
                        }
                      },
                      "id": 17466,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9014,
                      "src": "16887:30:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17471,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17404,
                          "src": "16953:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17468,
                              "name": "_targetToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17351,
                              "src": "16935:12:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            ],
                            "id": 17467,
                            "name": "reserveBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9699,
                            "src": "16920:14:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                              "typeString": "function (contract IERC20Token) view returns (uint256)"
                            }
                          },
                          "id": 17469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16920:28:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17470,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22627,
                        "src": "16920:32:28",
                        "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": 17472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16920:40:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16887:73:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17474,
                  "nodeType": "ExpressionStatement",
                  "src": "16887:73:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17475,
                        "name": "stakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16673,
                        "src": "17031:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17477,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17476,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17351,
                        "src": "17046:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17031:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17482,
                          "name": "standardFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17406,
                          "src": "17095:11:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 17478,
                            "name": "stakedBalances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16673,
                            "src": "17062:14:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                              "typeString": "mapping(contract IERC20Token => uint256)"
                            }
                          },
                          "id": 17480,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17479,
                            "name": "_targetToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17351,
                            "src": "17077:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "17062:28:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22605,
                        "src": "17062:32:28",
                        "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": 17483,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17062:45:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17031:76:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17485,
                  "nodeType": "ExpressionStatement",
                  "src": "17031:76:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17486,
                      "name": "_targetToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17351,
                      "src": "17194:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17487,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "17210:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "17194:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 17502,
                    "nodeType": "Block",
                    "src": "17302:75:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17497,
                              "name": "_targetToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17351,
                              "src": "17330:12:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 17498,
                              "name": "_beneficiary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17357,
                              "src": "17344:12:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 17499,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17404,
                              "src": "17358:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 17496,
                            "name": "safeTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22809,
                            "src": "17317:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (contract IERC20Token,address,uint256)"
                            }
                          },
                          "id": 17500,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17317:48:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 17501,
                        "nodeType": "ExpressionStatement",
                        "src": "17317:48:28"
                      }
                    ]
                  },
                  "id": 17503,
                  "nodeType": "IfStatement",
                  "src": "17190:187:28",
                  "trueBody": {
                    "id": 17495,
                    "nodeType": "Block",
                    "src": "17231:56:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17492,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17404,
                              "src": "17268:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 17489,
                              "name": "_beneficiary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17357,
                              "src": "17246:12:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 17491,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17246:21:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 17493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17246:29:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 17494,
                        "nodeType": "ExpressionStatement",
                        "src": "17246:29:28"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17505,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17349,
                        "src": "17455:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17506,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17351,
                        "src": "17469:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17507,
                        "name": "_trader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17355,
                        "src": "17483:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17508,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17353,
                        "src": "17492:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17509,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17404,
                        "src": "17501:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17510,
                        "name": "totalFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17408,
                        "src": "17509:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17504,
                      "name": "dispatchConversionEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9908,
                      "src": "17431:23:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 17511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17431:87:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17512,
                  "nodeType": "ExpressionStatement",
                  "src": "17431:87:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17514,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17349,
                        "src": "17619:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17515,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17351,
                        "src": "17633:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17516,
                        "name": "sourceTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17391,
                        "src": "17647:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17517,
                        "name": "targetTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17398,
                        "src": "17666:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 17513,
                      "name": "dispatchTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18337,
                      "src": "17590:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint32_$_t_uint32_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint32,uint32)"
                      }
                    },
                    "id": 17518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17590:94:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17519,
                  "nodeType": "ExpressionStatement",
                  "src": "17590:94:28"
                },
                {
                  "assignments": [
                    17521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17521,
                      "mutability": "mutable",
                      "name": "targetPoolToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "17929:27:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ISmartToken_$21516",
                        "typeString": "contract ISmartToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17520,
                        "name": "ISmartToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21516,
                        "src": "17929:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17525,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17522,
                      "name": "reservesToPoolTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16677,
                      "src": "17959:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
                        "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
                      }
                    },
                    "id": 17524,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17523,
                      "name": "_targetToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17351,
                      "src": "17980:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17959:34:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17929:64:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17527,
                        "name": "targetPoolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17521,
                        "src": "18037:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 17528,
                            "name": "targetPoolToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17521,
                            "src": "18054:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISmartToken_$21516",
                              "typeString": "contract ISmartToken"
                            }
                          },
                          "id": 17529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21415,
                          "src": "18054:27:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 17530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18054:29:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17531,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17351,
                        "src": "18085:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17526,
                      "name": "dispatchPoolTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18357,
                      "src": "18004:32:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ISmartToken_$21516_$_t_uint256_$_t_contract$_IERC20Token_$21461_$returns$__$",
                        "typeString": "function (contract ISmartToken,uint256,contract IERC20Token)"
                      }
                    },
                    "id": 17532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18004:94:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17533,
                  "nodeType": "ExpressionStatement",
                  "src": "18004:94:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17534,
                    "name": "amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17404,
                    "src": "18166:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17370,
                  "id": 17535,
                  "nodeType": "Return",
                  "src": "18159:13:28"
                }
              ]
            },
            "documentation": {
              "id": 17347,
              "nodeType": "StructuredDocumentation",
              "src": "14864:569:28",
              "text": " @dev converts a specific amount of source tokens to target tokens\n can only be called by the bancor network contract\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _amount      amount of tokens to convert (in units of the source token)\n @param _trader      address of the caller who executed the conversion\n @param _beneficiary wallet to receive the conversion result\n @return amount of tokens received (in units of the target token)"
            },
            "id": 17537,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17361,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17360,
                  "name": "active",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9134,
                  "src": "15619:6:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15619:6:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17363,
                    "name": "_sourceToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17349,
                    "src": "15648:12:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17364,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17362,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "15635:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15635:26:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17366,
                    "name": "_targetToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17351,
                    "src": "15684:12:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17367,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17365,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "15671:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15671:26:28"
              }
            ],
            "name": "doConvert",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 17359,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15601:8:28"
            },
            "parameters": {
              "id": 17358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17349,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15458:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17348,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "15458:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17351,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15484:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17350,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "15484:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17353,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15510:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17352,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15510:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17355,
                  "mutability": "mutable",
                  "name": "_trader",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15527:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15527:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17357,
                  "mutability": "mutable",
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15544:28:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 17356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15544:15:28",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15457:116:28"
            },
            "returnParameters": {
              "id": 17370,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17369,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15716:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15716:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15715:9:28"
            },
            "scope": 18367,
            "src": "15439:2741:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 17762,
              "nodeType": "Block",
              "src": "18867:3062:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          "id": 17565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 17563,
                            "name": "_reserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17540,
                            "src": "18988:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 17564,
                            "name": "ETH_RESERVE_ADDRESS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9012,
                            "src": "19005:19:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "src": "18988:36:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 17573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 17570,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "19050:3:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 17571,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19050:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 17572,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19063:1:28",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19050:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 17574,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "18988:76:28",
                        "trueExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 17569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 17566,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "19027:3:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 17567,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19027:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 17568,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17542,
                            "src": "19040:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "19027:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4554485f414d4f554e545f4d49534d41544348",
                        "id": 17575,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19066:25:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b27c160ac497b67c4fef6b5554e0b1a41f3c9b44e4bd8482662df760b76c093b",
                          "typeString": "literal_string \"ERR_ETH_AMOUNT_MISMATCH\""
                        },
                        "value": "ERR_ETH_AMOUNT_MISMATCH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b27c160ac497b67c4fef6b5554e0b1a41f3c9b44e4bd8482662df760b76c093b",
                          "typeString": "literal_string \"ERR_ETH_AMOUNT_MISMATCH\""
                        }
                      ],
                      "id": 17562,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18980:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18980:112:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17577,
                  "nodeType": "ExpressionStatement",
                  "src": "18980:112:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17578,
                      "name": "syncReserveBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9871,
                      "src": "19156:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 17579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19156:21:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17580,
                  "nodeType": "ExpressionStatement",
                  "src": "19156:21:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17581,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17540,
                      "src": "19300:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17582,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "19317:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "19300:36:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17599,
                  "nodeType": "IfStatement",
                  "src": "19296:161:28",
                  "trueBody": {
                    "id": 17598,
                    "nodeType": "Block",
                    "src": "19338:119:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17596,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 17584,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9040,
                                "src": "19353:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                  "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                }
                              },
                              "id": 17586,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 17585,
                                "name": "ETH_RESERVE_ADDRESS",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9012,
                                "src": "19362:19:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                  "typeString": "contract IERC20Token"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19353:29:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                "typeString": "struct ConverterBase.Reserve storage ref"
                              }
                            },
                            "id": 17587,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9014,
                            "src": "19353:37:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 17593,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "19435:3:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 17594,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "19435:9:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 17588,
                                    "name": "reserves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9040,
                                    "src": "19393:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                      "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                    }
                                  },
                                  "id": 17590,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 17589,
                                    "name": "ETH_RESERVE_ADDRESS",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9012,
                                    "src": "19402:19:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                      "typeString": "contract IERC20Token"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19393:29:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                    "typeString": "struct ConverterBase.Reserve storage ref"
                                  }
                                },
                                "id": 17591,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9014,
                                "src": "19393:37:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 17592,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22627,
                              "src": "19393:41:28",
                              "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": 17595,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19393:52:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "19353:92:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17597,
                        "nodeType": "ExpressionStatement",
                        "src": "19353:92:28"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    17601
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17601,
                      "mutability": "mutable",
                      "name": "initialStakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17762,
                      "src": "19546:28:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17600,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "19546:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17605,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17602,
                      "name": "stakedBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16673,
                      "src": "19577:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20Token => uint256)"
                      }
                    },
                    "id": 17604,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17603,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17540,
                      "src": "19592:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19577:29:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19546:60:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 17606,
                    "name": "maxStakedBalanceEnabled",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16692,
                    "src": "19720:23:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17626,
                  "nodeType": "IfStatement",
                  "src": "19716:209:28",
                  "trueBody": {
                    "id": 17625,
                    "nodeType": "Block",
                    "src": "19745:180:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 17621,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 17612,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 17608,
                                    "name": "maxStakedBalances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16689,
                                    "src": "19768:17:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                                      "typeString": "mapping(contract IERC20Token => uint256)"
                                    }
                                  },
                                  "id": 17610,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 17609,
                                    "name": "_reserveToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 17540,
                                    "src": "19786:13:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                      "typeString": "contract IERC20Token"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19768:32:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 17611,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "19804:1:28",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "19768:37:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 17620,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 17615,
                                      "name": "_amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17542,
                                      "src": "19834:7:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 17613,
                                      "name": "initialStakedBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17601,
                                      "src": "19809:20:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 17614,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22605,
                                    "src": "19809:24:28",
                                    "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": 17616,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19809:33:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 17617,
                                    "name": "maxStakedBalances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16689,
                                    "src": "19846:17:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                                      "typeString": "mapping(contract IERC20Token => uint256)"
                                    }
                                  },
                                  "id": 17619,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 17618,
                                    "name": "_reserveToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 17540,
                                    "src": "19864:13:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                      "typeString": "contract IERC20Token"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19846:32:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "19809:69:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "19768:110:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4552525f4d41585f5354414b45445f42414c414e43455f52454143484544",
                              "id": 17622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19880:32:28",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e71abaa0836b516acb5bcc1418977bbb31101745086dfce64d3b60d38c4171f5",
                                "typeString": "literal_string \"ERR_MAX_STAKED_BALANCE_REACHED\""
                              },
                              "value": "ERR_MAX_STAKED_BALANCE_REACHED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e71abaa0836b516acb5bcc1418977bbb31101745086dfce64d3b60d38c4171f5",
                                "typeString": "literal_string \"ERR_MAX_STAKED_BALANCE_REACHED\""
                              }
                            ],
                            "id": 17607,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "19760:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 17623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19760:153:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 17624,
                        "nodeType": "ExpressionStatement",
                        "src": "19760:153:28"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    17628
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17628,
                      "mutability": "mutable",
                      "name": "reservePoolToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17762,
                      "src": "20011:28:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ISmartToken_$21516",
                        "typeString": "contract ISmartToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17627,
                        "name": "ISmartToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21516,
                        "src": "20011:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17632,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17629,
                      "name": "reservesToPoolTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16677,
                      "src": "20042:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
                        "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
                      }
                    },
                    "id": 17631,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17630,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17540,
                      "src": "20063:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20042:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20011:66:28"
                },
                {
                  "assignments": [
                    17634
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17634,
                      "mutability": "mutable",
                      "name": "poolTokenSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17762,
                      "src": "20088:23:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17633,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20088:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17638,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17635,
                        "name": "reservePoolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17628,
                        "src": "20114:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "id": 17636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21415,
                      "src": "20114:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 17637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20114:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20088:56:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17639,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17540,
                      "src": "20239:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17640,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "20256:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "20239:36:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17653,
                  "nodeType": "IfStatement",
                  "src": "20235:122:28",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17643,
                          "name": "_reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17540,
                          "src": "20307:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 17644,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "20322:3:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 17645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "20322:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17648,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "20342:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                "typeString": "contract LiquidityPoolV2Converter"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                "typeString": "contract LiquidityPoolV2Converter"
                              }
                            ],
                            "id": 17647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "20334:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17646,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "20334:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 17649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20334:13:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 17650,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17542,
                          "src": "20349:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 17642,
                        "name": "safeTransferFrom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22859,
                        "src": "20290:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (contract IERC20Token,address,address,uint256)"
                        }
                      },
                      "id": 17651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20290:67:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17652,
                    "nodeType": "ExpressionStatement",
                    "src": "20290:67:28"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17654,
                          "name": "reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9040,
                          "src": "20424:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                            "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                          }
                        },
                        "id": 17656,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17655,
                          "name": "_reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17540,
                          "src": "20433:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20424:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                          "typeString": "struct ConverterBase.Reserve storage ref"
                        }
                      },
                      "id": 17657,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9014,
                      "src": "20424:31:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17663,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17542,
                          "src": "20494:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17658,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9040,
                              "src": "20458:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                              }
                            },
                            "id": 17660,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17659,
                              "name": "_reserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17540,
                              "src": "20467:13:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20458:23:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                              "typeString": "struct ConverterBase.Reserve storage ref"
                            }
                          },
                          "id": 17661,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9014,
                          "src": "20458:31:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17662,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22605,
                        "src": "20458:35:28",
                        "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": 17664,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20458:44:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20424:78:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17666,
                  "nodeType": "ExpressionStatement",
                  "src": "20424:78:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17667,
                        "name": "stakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16673,
                        "src": "20513:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17669,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17668,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17540,
                        "src": "20528:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "20513:29:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17672,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17542,
                          "src": "20570:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 17670,
                          "name": "initialStakedBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17601,
                          "src": "20545:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17671,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22605,
                        "src": "20545:24:28",
                        "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": 17673,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20545:33:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20513:65:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17675,
                  "nodeType": "ExpressionStatement",
                  "src": "20513:65:28"
                },
                {
                  "assignments": [
                    17677
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17677,
                      "mutability": "mutable",
                      "name": "poolTokenAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17762,
                      "src": "20798:23:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17676,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20798:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17679,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 17678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "20824:1:28",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20798:27:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 17686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 17682,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 17680,
                        "name": "initialStakedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17601,
                        "src": "20840:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20864:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "20840:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 17685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 17683,
                        "name": "poolTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17634,
                        "src": "20869:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17684,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20888:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "20869:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "20840:49:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 17699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 17691,
                        "name": "poolTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17677,
                        "src": "20958:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17697,
                            "name": "initialStakedBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17601,
                            "src": "21009:20:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 17694,
                                "name": "poolTokenSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17634,
                                "src": "20988:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 17692,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17542,
                                "src": "20976:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 17693,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22661,
                              "src": "20976:11:28",
                              "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": 17695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20976:28:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 17696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22687,
                          "src": "20976:32:28",
                          "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": 17698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20976:54:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20958:72:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 17700,
                    "nodeType": "ExpressionStatement",
                    "src": "20958:72:28"
                  },
                  "id": 17701,
                  "nodeType": "IfStatement",
                  "src": "20836:194:28",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 17689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 17687,
                        "name": "poolTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17677,
                        "src": "20904:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "id": 17688,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17542,
                        "src": "20922:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20904:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 17690,
                    "nodeType": "ExpressionStatement",
                    "src": "20904:25:28"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 17705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 17703,
                          "name": "poolTokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17677,
                          "src": "21049:15:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 17704,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17544,
                          "src": "21068:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "21049:29:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f52455455524e5f544f4f5f4c4f57",
                        "id": 17706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21080:20:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c3237cc40443cfd1e0e9492ef35b7447eab6349fb6eac5eb1ec626edd3c555aa",
                          "typeString": "literal_string \"ERR_RETURN_TOO_LOW\""
                        },
                        "value": "ERR_RETURN_TOO_LOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c3237cc40443cfd1e0e9492ef35b7447eab6349fb6eac5eb1ec626edd3c555aa",
                          "typeString": "literal_string \"ERR_RETURN_TOO_LOW\""
                        }
                      ],
                      "id": 17702,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21041:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21041:60:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17708,
                  "nodeType": "ExpressionStatement",
                  "src": "21041:60:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17716,
                        "name": "reservePoolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17628,
                        "src": "21204:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17717,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "21222:3:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "21222:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17719,
                        "name": "poolTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17677,
                        "src": "21234:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 17712,
                                "name": "anchor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9030,
                                "src": "21190:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              ],
                              "id": 17711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21182:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 17710,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "21182:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 17713,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21182:15:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 17709,
                          "name": "IPoolTokensContainer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18801,
                          "src": "21161:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IPoolTokensContainer_$18801_$",
                            "typeString": "type(contract IPoolTokensContainer)"
                          }
                        },
                        "id": 17714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21161:37:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                          "typeString": "contract IPoolTokensContainer"
                        }
                      },
                      "id": 17715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18791,
                      "src": "21161:42:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ISmartToken_$21516_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract ISmartToken,address,uint256) external"
                      }
                    },
                    "id": 17720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21161:89:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17721,
                  "nodeType": "ExpressionStatement",
                  "src": "21161:89:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17722,
                      "name": "rebalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18205,
                      "src": "21312:9:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 17723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21312:11:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17724,
                  "nodeType": "ExpressionStatement",
                  "src": "21312:11:28"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17726,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "21404:3:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17727,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "21404:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17728,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17540,
                        "src": "21416:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17729,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17542,
                        "src": "21431:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17732,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17542,
                            "src": "21465:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 17730,
                            "name": "initialStakedBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17601,
                            "src": "21440:20:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 17731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22605,
                          "src": "21440:24:28",
                          "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": 17733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21440:33:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17736,
                            "name": "poolTokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17677,
                            "src": "21495:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 17734,
                            "name": "poolTokenSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17634,
                            "src": "21475:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 17735,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22605,
                          "src": "21475:19:28",
                          "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": 17737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21475:36:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17725,
                      "name": "LiquidityAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13028,
                      "src": "21389:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IERC20Token_$21461_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,contract IERC20Token,uint256,uint256,uint256)"
                      }
                    },
                    "id": 17738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21389:123:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17739,
                  "nodeType": "EmitStatement",
                  "src": "21384:128:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17741,
                        "name": "reservePoolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17628,
                        "src": "21622:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17744,
                            "name": "poolTokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17677,
                            "src": "21660:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 17742,
                            "name": "poolTokenSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17634,
                            "src": "21640:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 17743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22605,
                          "src": "21640:19:28",
                          "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": 17745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21640:36:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17746,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17540,
                        "src": "21678:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17740,
                      "name": "dispatchPoolTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18357,
                      "src": "21589:32:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ISmartToken_$21516_$_t_uint256_$_t_contract$_IERC20Token_$21461_$returns$__$",
                        "typeString": "function (contract ISmartToken,uint256,contract IERC20Token)"
                      }
                    },
                    "id": 17747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21589:103:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17748,
                  "nodeType": "ExpressionStatement",
                  "src": "21589:103:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17750,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "21793:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17752,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 17751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "21807:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21793:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17753,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "21811:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17755,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 17754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "21825:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21811:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17756,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21829:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21832:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 17749,
                      "name": "dispatchTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18337,
                      "src": "21764:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint32_$_t_uint32_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint32,uint32)"
                      }
                    },
                    "id": 17758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21764:70:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17759,
                  "nodeType": "ExpressionStatement",
                  "src": "21764:70:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17760,
                    "name": "poolTokenAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17677,
                    "src": "21906:15:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17561,
                  "id": 17761,
                  "nodeType": "Return",
                  "src": "21899:22:28"
                }
              ]
            },
            "documentation": {
              "id": 17538,
              "nodeType": "StructuredDocumentation",
              "src": "18188:379:28",
              "text": " @dev increases the pool's liquidity and mints new shares in the pool to the caller\n @param _reserveToken    address of the reserve token to add liquidity to\n @param _amount          amount of liquidity to add\n @param _minReturn       minimum return-amount of pool tokens\n @return amount of pool tokens minted"
            },
            "functionSelector": "55776b77",
            "id": 17763,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17547,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17546,
                  "name": "protected",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22565,
                  "src": "18701:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18701:9:28"
              },
              {
                "arguments": null,
                "id": 17549,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17548,
                  "name": "active",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9134,
                  "src": "18720:6:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18720:6:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17551,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17540,
                    "src": "18749:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17552,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17550,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "18736:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18736:27:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17554,
                    "name": "_amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17542,
                    "src": "18789:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 17555,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17553,
                  "name": "greaterThanZero",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22929,
                  "src": "18773:15:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18773:24:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17557,
                    "name": "_minReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17544,
                    "src": "18823:10:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 17558,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17556,
                  "name": "greaterThanZero",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22929,
                  "src": "18807:15:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18807:27:28"
              }
            ],
            "name": "addLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17540,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17763,
                  "src": "18595:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17539,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "18595:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17542,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17763,
                  "src": "18622:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17541,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18622:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17544,
                  "mutability": "mutable",
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17763,
                  "src": "18639:18:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18639:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18594:64:28"
            },
            "returnParameters": {
              "id": 17561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17560,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17763,
                  "src": "18853:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17559,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18853:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18852:9:28"
            },
            "scope": 18367,
            "src": "18573:3356:28",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17915,
              "nodeType": "Block",
              "src": "22563:1948:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17788,
                      "name": "syncReserveBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9871,
                      "src": "22625:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 17789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22625:21:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17790,
                  "nodeType": "ExpressionStatement",
                  "src": "22625:21:28"
                },
                {
                  "assignments": [
                    17792
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17792,
                      "mutability": "mutable",
                      "name": "initialPoolSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17915,
                      "src": "22732:25:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17791,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22732:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17796,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17793,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17766,
                        "src": "22760:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "id": 17794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21415,
                      "src": "22760:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 17795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22760:24:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22732:52:28"
                },
                {
                  "assignments": [
                    17798,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17798,
                      "mutability": "mutable",
                      "name": "reserveAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17915,
                      "src": "22874:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17797,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22874:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 17803,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17800,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17766,
                        "src": "22929:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17801,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17768,
                        "src": "22941:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17799,
                      "name": "removeLiquidityReturnAndFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18008,
                      "src": "22901:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ISmartToken_$21516_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract ISmartToken,uint256) view returns (uint256,uint256)"
                      }
                    },
                    "id": 17802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22901:48:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22873:76:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 17807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 17805,
                          "name": "reserveAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17798,
                          "src": "22968:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 17806,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17770,
                          "src": "22985:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22968:27:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f52455455524e5f544f4f5f4c4f57",
                        "id": 17808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22997:20:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c3237cc40443cfd1e0e9492ef35b7447eab6349fb6eac5eb1ec626edd3c555aa",
                          "typeString": "literal_string \"ERR_RETURN_TOO_LOW\""
                        },
                        "value": "ERR_RETURN_TOO_LOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c3237cc40443cfd1e0e9492ef35b7447eab6349fb6eac5eb1ec626edd3c555aa",
                          "typeString": "literal_string \"ERR_RETURN_TOO_LOW\""
                        }
                      ],
                      "id": 17804,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "22960:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22960:58:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17810,
                  "nodeType": "ExpressionStatement",
                  "src": "22960:58:28"
                },
                {
                  "assignments": [
                    17812
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17812,
                      "mutability": "mutable",
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17915,
                      "src": "23096:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17811,
                        "name": "IERC20Token",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21461,
                        "src": "23096:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17816,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17813,
                      "name": "poolTokensToReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16681,
                      "src": "23123:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                        "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
                      }
                    },
                    "id": 17815,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17814,
                      "name": "_poolToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17766,
                      "src": "23144:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ISmartToken_$21516",
                        "typeString": "contract ISmartToken"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23123:32:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23096:59:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17824,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17766,
                        "src": "23253:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17825,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "23265:3:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "23265:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17827,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17768,
                        "src": "23277:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 17820,
                                "name": "anchor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9030,
                                "src": "23239:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              ],
                              "id": 17819,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "23231:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 17818,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "23231:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 17821,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23231:15:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 17817,
                          "name": "IPoolTokensContainer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18801,
                          "src": "23210:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IPoolTokensContainer_$18801_$",
                            "typeString": "type(contract IPoolTokensContainer)"
                          }
                        },
                        "id": 17822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23210:37:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                          "typeString": "contract IPoolTokensContainer"
                        }
                      },
                      "id": 17823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18800,
                      "src": "23210:42:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ISmartToken_$21516_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract ISmartToken,address,uint256) external"
                      }
                    },
                    "id": 17828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23210:75:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17829,
                  "nodeType": "ExpressionStatement",
                  "src": "23210:75:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17830,
                          "name": "reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9040,
                          "src": "23352:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                            "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                          }
                        },
                        "id": 17832,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17831,
                          "name": "reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17812,
                          "src": "23361:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23352:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                          "typeString": "struct ConverterBase.Reserve storage ref"
                        }
                      },
                      "id": 17833,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9014,
                      "src": "23352:30:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17839,
                          "name": "reserveAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17798,
                          "src": "23420:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17834,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9040,
                              "src": "23385:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                              }
                            },
                            "id": 17836,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17835,
                              "name": "reserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17812,
                              "src": "23394:12:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "23385:22:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                              "typeString": "struct ConverterBase.Reserve storage ref"
                            }
                          },
                          "id": 17837,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9014,
                          "src": "23385:30:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22627,
                        "src": "23385:34:28",
                        "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": 17840,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23385:49:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23352:82:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17842,
                  "nodeType": "ExpressionStatement",
                  "src": "23352:82:28"
                },
                {
                  "assignments": [
                    17844
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17844,
                      "mutability": "mutable",
                      "name": "newStakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17915,
                      "src": "23445:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17843,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23445:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17851,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17849,
                        "name": "reserveAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17798,
                        "src": "23505:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17845,
                          "name": "stakedBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16673,
                          "src": "23472:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                            "typeString": "mapping(contract IERC20Token => uint256)"
                          }
                        },
                        "id": 17847,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17846,
                          "name": "reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17812,
                          "src": "23487:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23472:28:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 17848,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22627,
                      "src": "23472:32:28",
                      "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": 17850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23472:47:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23445:74:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17852,
                        "name": "stakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16673,
                        "src": "23530:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17854,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17853,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17812,
                        "src": "23545:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "23530:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 17855,
                      "name": "newStakedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17844,
                      "src": "23561:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23530:47:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17857,
                  "nodeType": "ExpressionStatement",
                  "src": "23530:47:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17858,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17812,
                      "src": "23648:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17859,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "23664:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "23648:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17870,
                          "name": "reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17812,
                          "src": "23774:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 17871,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "23788:3:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 17872,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "23788:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 17873,
                          "name": "reserveAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17798,
                          "src": "23800:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 17869,
                        "name": "safeTransfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22809,
                        "src": "23761:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (contract IERC20Token,address,uint256)"
                        }
                      },
                      "id": 17874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23761:53:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17875,
                    "nodeType": "ExpressionStatement",
                    "src": "23761:53:28"
                  },
                  "id": 17876,
                  "nodeType": "IfStatement",
                  "src": "23644:170:28",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17866,
                          "name": "reserveAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17798,
                          "src": "23718:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 17861,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "23698:3:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 17864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "23698:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 17865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "23698:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                          "typeString": "function (uint256)"
                        }
                      },
                      "id": 17867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23698:34:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17868,
                    "nodeType": "ExpressionStatement",
                    "src": "23698:34:28"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17877,
                      "name": "rebalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18205,
                      "src": "23876:9:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 17878,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23876:11:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17879,
                  "nodeType": "ExpressionStatement",
                  "src": "23876:11:28"
                },
                {
                  "assignments": [
                    17881
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17881,
                      "mutability": "mutable",
                      "name": "newPoolTokenSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17915,
                      "src": "23900:26:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17880,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23900:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17886,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17884,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17768,
                        "src": "23951:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17882,
                        "name": "initialPoolSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17792,
                        "src": "23929:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 17883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22627,
                      "src": "23929:21:28",
                      "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": 17885,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23929:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23900:59:28"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17888,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "24044:3:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24044:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17890,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17812,
                        "src": "24056:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17891,
                        "name": "reserveAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17798,
                        "src": "24070:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17892,
                        "name": "newStakedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17844,
                        "src": "24085:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17893,
                        "name": "newPoolTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17881,
                        "src": "24103:18:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17887,
                      "name": "LiquidityRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13041,
                      "src": "24027:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IERC20Token_$21461_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,contract IERC20Token,uint256,uint256,uint256)"
                      }
                    },
                    "id": 17894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24027:95:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17895,
                  "nodeType": "EmitStatement",
                  "src": "24022:100:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17897,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17766,
                        "src": "24232:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17898,
                        "name": "newPoolTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17881,
                        "src": "24244:18:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17899,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17812,
                        "src": "24264:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17896,
                      "name": "dispatchPoolTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18357,
                      "src": "24199:32:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ISmartToken_$21516_$_t_uint256_$_t_contract$_IERC20Token_$21461_$returns$__$",
                        "typeString": "function (contract ISmartToken,uint256,contract IERC20Token)"
                      }
                    },
                    "id": 17900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24199:78:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17901,
                  "nodeType": "ExpressionStatement",
                  "src": "24199:78:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17903,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "24378:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17905,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 17904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "24392:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "24378:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17906,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "24396:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17908,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 17907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "24410:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "24396:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24414:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24417:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 17902,
                      "name": "dispatchTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18337,
                      "src": "24349:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint32_$_t_uint32_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint32,uint32)"
                      }
                    },
                    "id": 17911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24349:70:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17912,
                  "nodeType": "ExpressionStatement",
                  "src": "24349:70:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17913,
                    "name": "reserveAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17798,
                    "src": "24490:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17787,
                  "id": 17914,
                  "nodeType": "Return",
                  "src": "24483:20:28"
                }
              ]
            },
            "documentation": {
              "id": 17764,
              "nodeType": "StructuredDocumentation",
              "src": "21937:344:28",
              "text": " @dev decreases the pool's liquidity and burns the caller's shares in the pool\n @param _poolToken   address of the pool token\n @param _amount      amount of pool tokens to burn\n @param _minReturn   minimum return-amount of reserve tokens\n @return amount of liquidity removed"
            },
            "functionSelector": "e38192e3",
            "id": 17916,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17773,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17772,
                  "name": "protected",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22565,
                  "src": "22398:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22398:9:28"
              },
              {
                "arguments": null,
                "id": 17775,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17774,
                  "name": "active",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9134,
                  "src": "22417:6:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22417:6:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17777,
                    "name": "_poolToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17766,
                    "src": "22448:10:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  }
                ],
                "id": 17778,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17776,
                  "name": "validPoolToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16728,
                  "src": "22433:14:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ISmartToken_$21516_$",
                    "typeString": "modifier (contract ISmartToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22433:26:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17780,
                    "name": "_amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17768,
                    "src": "22485:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 17781,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17779,
                  "name": "greaterThanZero",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22929,
                  "src": "22469:15:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22469:24:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17783,
                    "name": "_minReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17770,
                    "src": "22519:10:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 17784,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17782,
                  "name": "greaterThanZero",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22929,
                  "src": "22503:15:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22503:27:28"
              }
            ],
            "name": "removeLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17766,
                  "mutability": "mutable",
                  "name": "_poolToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17916,
                  "src": "22312:22:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17765,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "22312:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17768,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17916,
                  "src": "22336:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17767,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22336:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17770,
                  "mutability": "mutable",
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17916,
                  "src": "22353:18:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17769,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22353:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22311:61:28"
            },
            "returnParameters": {
              "id": 17787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17786,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17916,
                  "src": "22549:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17785,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22549:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22548:9:28"
            },
            "scope": 18367,
            "src": "22287:2224:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18007,
              "nodeType": "Block",
              "src": "25040:683:28",
              "statements": [
                {
                  "assignments": [
                    17929
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17929,
                      "mutability": "mutable",
                      "name": "totalSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18007,
                      "src": "25051:19:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17928,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25051:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17933,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17930,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17919,
                        "src": "25073:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "id": 17931,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21415,
                      "src": "25073:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 17932,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25073:24:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25051:46:28"
                },
                {
                  "assignments": [
                    17935
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17935,
                      "mutability": "mutable",
                      "name": "stakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18007,
                      "src": "25108:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17934,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25108:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17941,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17936,
                      "name": "stakedBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16673,
                      "src": "25132:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20Token => uint256)"
                      }
                    },
                    "id": 17940,
                    "indexExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17937,
                        "name": "poolTokensToReserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16681,
                        "src": "25147:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                          "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
                        }
                      },
                      "id": 17939,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17938,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17919,
                        "src": "25168:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "25147:32:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "25132:48:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25108:72:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 17944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17942,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17921,
                      "src": "25197:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17943,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17929,
                      "src": "25207:11:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25197:21:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18002,
                  "nodeType": "IfStatement",
                  "src": "25193:487:28",
                  "trueBody": {
                    "id": 18001,
                    "nodeType": "Block",
                    "src": "25220:460:28",
                    "statements": [
                      {
                        "assignments": [
                          17946
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17946,
                            "mutability": "mutable",
                            "name": "x",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25235:9:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17945,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25235:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17953,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17951,
                              "name": "AMPLIFICATION_FACTOR",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16663,
                              "src": "25287:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 17947,
                                "name": "stakedBalances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16673,
                                "src": "25247:14:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                                  "typeString": "mapping(contract IERC20Token => uint256)"
                                }
                              },
                              "id": 17949,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 17948,
                                "name": "primaryReserveToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16667,
                                "src": "25262:19:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                  "typeString": "contract IERC20Token"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "25247:35:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 17950,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22661,
                            "src": "25247:39:28",
                            "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": 17952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25247:61:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25235:73:28"
                      },
                      {
                        "assignments": [
                          17955
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17955,
                            "mutability": "mutable",
                            "name": "y",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25323:9:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17954,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25323:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17959,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17957,
                              "name": "primaryReserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16667,
                              "src": "25352:19:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            ],
                            "id": 17956,
                            "name": "amplifiedBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18229,
                            "src": "25335:16:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                              "typeString": "function (contract IERC20Token) view returns (uint256)"
                            }
                          },
                          "id": 17958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25335:37:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25323:49:28"
                      },
                      {
                        "assignments": [
                          17961,
                          17963
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17961,
                            "mutability": "mutable",
                            "name": "min",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25388:11:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17960,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25388:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 17963,
                            "mutability": "mutable",
                            "name": "max",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25401:11:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17962,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25401:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17974,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 17966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 17964,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17946,
                              "src": "25416:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 17965,
                              "name": "y",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17955,
                              "src": "25420:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "25416:5:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 17970,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17955,
                                "src": "25434:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 17971,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17946,
                                "src": "25437:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 17972,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "25433:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "id": 17973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "25416:23:28",
                          "trueExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 17967,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17946,
                                "src": "25425:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 17968,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17955,
                                "src": "25428:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 17969,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "25424:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25387:52:28"
                      },
                      {
                        "assignments": [
                          17976
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17976,
                            "mutability": "mutable",
                            "name": "amountBeforeFee",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25454:23:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17975,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25454:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17984,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17982,
                              "name": "totalSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17929,
                              "src": "25511:11:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 17979,
                                  "name": "stakedBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17935,
                                  "src": "25492:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 17977,
                                  "name": "_amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17921,
                                  "src": "25480:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 17978,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22661,
                                "src": "25480:11:28",
                                "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": 17980,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25480:26:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 17981,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22687,
                            "src": "25480:30:28",
                            "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": 17983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25480:43:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25454:69:28"
                      },
                      {
                        "assignments": [
                          17986
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17986,
                            "mutability": "mutable",
                            "name": "amountAfterFee",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25538:22:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17985,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25538:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17994,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17992,
                              "name": "max",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17963,
                              "src": "25592:3:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 17989,
                                  "name": "min",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17961,
                                  "src": "25583:3:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 17987,
                                  "name": "amountBeforeFee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17976,
                                  "src": "25563:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 17988,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22661,
                                "src": "25563:19:28",
                                "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": 17990,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25563:24:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 17991,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22687,
                            "src": "25563:28:28",
                            "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": 17993,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25563:33:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25538:58:28"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 17995,
                              "name": "amountAfterFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17986,
                              "src": "25619:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 17998,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 17996,
                                "name": "amountBeforeFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17976,
                                "src": "25635:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 17997,
                                "name": "amountAfterFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17986,
                                "src": "25653:14:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25635:32:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 17999,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "25618:50:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "functionReturnParameters": 17927,
                        "id": 18000,
                        "nodeType": "Return",
                        "src": "25611:57:28"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 18003,
                        "name": "stakedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17935,
                        "src": "25698:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 18004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25713:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "id": 18005,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "25697:18:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_rational_0_by_1_$",
                      "typeString": "tuple(uint256,int_const 0)"
                    }
                  },
                  "functionReturnParameters": 17927,
                  "id": 18006,
                  "nodeType": "Return",
                  "src": "25690:25:28"
                }
              ]
            },
            "documentation": {
              "id": 17917,
              "nodeType": "StructuredDocumentation",
              "src": "24519:398:28",
              "text": " @dev calculates the amount of reserve tokens entitled for a given amount of pool tokens\n note that a fee is applied according to the equilibrium level of the primary reserve token\n @param _poolToken   address of the pool token\n @param _amount      amount of pool tokens\n @return amount after fee and fee, in reserve token units"
            },
            "functionSelector": "69067d95",
            "id": 18008,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "removeLiquidityReturnAndFee",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17919,
                  "mutability": "mutable",
                  "name": "_poolToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18008,
                  "src": "24960:22:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17918,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "24960:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17921,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18008,
                  "src": "24984:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17920,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24984:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24959:41:28"
            },
            "returnParameters": {
              "id": 17927,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17924,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18008,
                  "src": "25022:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17923,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25022:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17926,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18008,
                  "src": "25031:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17925,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25031:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25021:18:28"
            },
            "scope": 18367,
            "src": "24923:800:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18082,
              "nodeType": "Block",
              "src": "26726:820:28",
              "statements": [
                {
                  "assignments": [
                    18029
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18029,
                      "mutability": "mutable",
                      "name": "sourceBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18082,
                      "src": "26783:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18028,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26783:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18033,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18031,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18011,
                        "src": "26824:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18030,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "26807:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26807:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26783:54:28"
                },
                {
                  "assignments": [
                    18035
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18035,
                      "mutability": "mutable",
                      "name": "targetBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18082,
                      "src": "26848:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18034,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26848:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18039,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18037,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18013,
                        "src": "26889:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18036,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "26872:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26872:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26848:54:28"
                },
                {
                  "assignments": [
                    18041
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18041,
                      "mutability": "mutable",
                      "name": "targetAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18082,
                      "src": "26949:20:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18040,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26949:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18054,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18048,
                        "name": "sourceBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18029,
                        "src": "27053:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18049,
                        "name": "_sourceWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18015,
                        "src": "27081:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18050,
                        "name": "targetBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18035,
                        "src": "27109:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18051,
                        "name": "_targetWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18017,
                        "src": "27137:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18052,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18019,
                        "src": "27165:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 18044,
                                "name": "BANCOR_FORMULA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21867,
                                "src": "26997:14:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 18043,
                              "name": "addressOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22052,
                              "src": "26987:9:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) view returns (address)"
                              }
                            },
                            "id": 18045,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26987:25:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18042,
                          "name": "IBancorFormula",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13177,
                          "src": "26972:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBancorFormula_$13177_$",
                            "typeString": "type(contract IBancorFormula)"
                          }
                        },
                        "id": 18046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "26972:41:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBancorFormula_$13177",
                          "typeString": "contract IBancorFormula"
                        }
                      },
                      "id": 18047,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "crossReserveTargetAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13120,
                      "src": "26972:66:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_uint32_$_t_uint256_$_t_uint32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint32,uint256,uint32,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 18053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26972:211:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26949:234:28"
                },
                {
                  "assignments": [
                    18056
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18056,
                      "mutability": "mutable",
                      "name": "standardFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18082,
                      "src": "27196:19:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18055,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27196:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18060,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18058,
                        "name": "targetAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18041,
                        "src": "27231:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18057,
                      "name": "calculateFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9806,
                      "src": "27218:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 18059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27218:26:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27196:48:28"
                },
                {
                  "assignments": [
                    18062
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18062,
                      "mutability": "mutable",
                      "name": "totalFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18082,
                      "src": "27255:16:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18061,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27255:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18073,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18071,
                        "name": "standardFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18056,
                        "src": "27335:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18068,
                            "name": "PPM_RESOLUTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9007,
                            "src": "27315:14:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 18065,
                                "name": "oracleDeviationFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16695,
                                "src": "27291:18:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 18063,
                                "name": "targetAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18041,
                                "src": "27274:12:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 18064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22661,
                              "src": "27274:16:28",
                              "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": 18066,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27274:36:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22687,
                          "src": "27274:40:28",
                          "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": 18069,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27274:56:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 18070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22605,
                      "src": "27274:60:28",
                      "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": 18072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27274:73:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27255:92:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18076,
                            "name": "totalFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18062,
                            "src": "27505:8:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 18074,
                            "name": "targetAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18041,
                            "src": "27488:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22627,
                          "src": "27488:16:28",
                          "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": 18077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27488:26:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18078,
                        "name": "standardFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18056,
                        "src": "27516:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18079,
                        "name": "totalFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18062,
                        "src": "27529:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 18080,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "27487:51:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 18027,
                  "id": 18081,
                  "nodeType": "Return",
                  "src": "27480:58:28"
                }
              ]
            },
            "documentation": {
              "id": 18009,
              "nodeType": "StructuredDocumentation",
              "src": "25731:720:28",
              "text": " @dev returns the expected target amount of converting one reserve to another along with the fees\n this version of the function expects the reserve weights as an input (gas optimization)\n @param _sourceToken     contract address of the source reserve token\n @param _targetToken     contract address of the target reserve token\n @param _sourceWeight    source reserve token weight\n @param _targetWeight    target reserve token weight\n @param _amount          amount of tokens received from the user\n @return expected target amount\n @return expected standard conversion fee\n @return expected total conversion fee"
            },
            "id": 18083,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "targetAmountAndFees",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18020,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18011,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26496:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18010,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "26496:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18013,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26531:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18012,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "26531:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18015,
                  "mutability": "mutable",
                  "name": "_sourceWeight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26566:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18014,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "26566:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18017,
                  "mutability": "mutable",
                  "name": "_targetWeight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26597:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18016,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "26597:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18019,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26628:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18018,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26628:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26485:159:28"
            },
            "returnParameters": {
              "id": 18027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18022,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26694:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18021,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26694:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18024,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26703:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18023,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26703:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18026,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26712:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18025,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26712:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26693:27:28"
            },
            "scope": 18367,
            "src": "26457:1089:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18163,
              "nodeType": "Block",
              "src": "27831:778:28",
              "statements": [
                {
                  "assignments": [
                    18088
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18088,
                      "mutability": "mutable",
                      "name": "container",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18163,
                      "src": "27842:30:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                        "typeString": "contract IPoolTokensContainer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 18087,
                        "name": "IPoolTokensContainer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 18801,
                        "src": "27842:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                          "typeString": "contract IPoolTokensContainer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18095,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18092,
                            "name": "anchor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9030,
                            "src": "27904:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                              "typeString": "contract IConverterAnchor"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                              "typeString": "contract IConverterAnchor"
                            }
                          ],
                          "id": 18091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "27896:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 18090,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "27896:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 18093,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27896:15:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18089,
                      "name": "IPoolTokensContainer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18801,
                      "src": "27875:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IPoolTokensContainer_$18801_$",
                        "typeString": "type(contract IPoolTokensContainer)"
                      }
                    },
                    "id": 18094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27875:37:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                      "typeString": "contract IPoolTokensContainer"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27842:70:28"
                },
                {
                  "assignments": [
                    18099
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18099,
                      "mutability": "mutable",
                      "name": "poolTokens",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18163,
                      "src": "27923:31:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ISmartToken_$21516_$dyn_memory_ptr",
                        "typeString": "contract ISmartToken[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 18097,
                          "name": "ISmartToken",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 21516,
                          "src": "27923:11:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ISmartToken_$21516",
                            "typeString": "contract ISmartToken"
                          }
                        },
                        "id": 18098,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "27923:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ISmartToken_$21516_$dyn_storage_ptr",
                          "typeString": "contract ISmartToken[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18103,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18100,
                        "name": "container",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18088,
                        "src": "27957:9:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                          "typeString": "contract IPoolTokensContainer"
                        }
                      },
                      "id": 18101,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "poolTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18777,
                      "src": "27957:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_array$_t_contract$_ISmartToken_$21516_$dyn_memory_ptr_$",
                        "typeString": "function () view external returns (contract ISmartToken[] memory)"
                      }
                    },
                    "id": 18102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27957:22:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ISmartToken_$21516_$dyn_memory_ptr",
                      "typeString": "contract ISmartToken[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27923:56:28"
                },
                {
                  "assignments": [
                    18105
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18105,
                      "mutability": "mutable",
                      "name": "initialSetup",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18163,
                      "src": "27990:17:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 18104,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "27990:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18110,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 18109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 18106,
                        "name": "poolTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18099,
                        "src": "28010:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ISmartToken_$21516_$dyn_memory_ptr",
                          "typeString": "contract ISmartToken[] memory"
                        }
                      },
                      "id": 18107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "28010:17:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28031:1:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "28010:22:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27990:42:28"
                },
                {
                  "assignments": [
                    18112
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18112,
                      "mutability": "mutable",
                      "name": "reserveCount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18163,
                      "src": "28045:20:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18111,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28045:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18115,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 18113,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9036,
                      "src": "28068:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                        "typeString": "contract IERC20Token[] storage ref"
                      }
                    },
                    "id": 18114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "28068:20:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28045:43:28"
                },
                {
                  "body": {
                    "id": 18161,
                    "nodeType": "Block",
                    "src": "28142:460:28",
                    "statements": [
                      {
                        "assignments": [
                          18127
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 18127,
                            "mutability": "mutable",
                            "name": "reservePoolToken",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18161,
                            "src": "28157:28:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISmartToken_$21516",
                              "typeString": "contract ISmartToken"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 18126,
                              "name": "ISmartToken",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 21516,
                              "src": "28157:11:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                "typeString": "contract ISmartToken"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 18128,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "28157:28:28"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 18129,
                          "name": "initialSetup",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18105,
                          "src": "28204:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 18143,
                          "nodeType": "Block",
                          "src": "28314:67:28",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 18141,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 18137,
                                  "name": "reservePoolToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18127,
                                  "src": "28333:16:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                    "typeString": "contract ISmartToken"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 18138,
                                    "name": "poolTokens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18099,
                                    "src": "28352:10:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_contract$_ISmartToken_$21516_$dyn_memory_ptr",
                                      "typeString": "contract ISmartToken[] memory"
                                    }
                                  },
                                  "id": 18140,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 18139,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18117,
                                    "src": "28363:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "28352:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                    "typeString": "contract ISmartToken"
                                  }
                                },
                                "src": "28333:32:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                  "typeString": "contract ISmartToken"
                                }
                              },
                              "id": 18142,
                              "nodeType": "ExpressionStatement",
                              "src": "28333:32:28"
                            }
                          ]
                        },
                        "id": 18144,
                        "nodeType": "IfStatement",
                        "src": "28200:181:28",
                        "trueBody": {
                          "id": 18136,
                          "nodeType": "Block",
                          "src": "28218:77:28",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 18134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 18130,
                                  "name": "reservePoolToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18127,
                                  "src": "28237:16:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                    "typeString": "contract ISmartToken"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 18131,
                                      "name": "container",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18088,
                                      "src": "28256:9:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                                        "typeString": "contract IPoolTokensContainer"
                                      }
                                    },
                                    "id": 18132,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "createToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18782,
                                    "src": "28256:21:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_contract$_ISmartToken_$21516_$",
                                      "typeString": "function () external returns (contract ISmartToken)"
                                    }
                                  },
                                  "id": 18133,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "28256:23:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                    "typeString": "contract ISmartToken"
                                  }
                                },
                                "src": "28237:42:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                  "typeString": "contract ISmartToken"
                                }
                              },
                              "id": 18135,
                              "nodeType": "ExpressionStatement",
                              "src": "28237:42:28"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18145,
                              "name": "reservesToPoolTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16677,
                              "src": "28461:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
                                "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
                              }
                            },
                            "id": 18149,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 18146,
                                "name": "reserveTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9036,
                                "src": "28482:13:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                                  "typeString": "contract IERC20Token[] storage ref"
                                }
                              },
                              "id": 18148,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18147,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18117,
                                "src": "28496:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "28482:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "28461:38:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISmartToken_$21516",
                              "typeString": "contract ISmartToken"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 18150,
                            "name": "reservePoolToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18127,
                            "src": "28502:16:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISmartToken_$21516",
                              "typeString": "contract ISmartToken"
                            }
                          },
                          "src": "28461:57:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ISmartToken_$21516",
                            "typeString": "contract ISmartToken"
                          }
                        },
                        "id": 18152,
                        "nodeType": "ExpressionStatement",
                        "src": "28461:57:28"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18159,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18153,
                              "name": "poolTokensToReserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16681,
                              "src": "28533:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                                "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
                              }
                            },
                            "id": 18155,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18154,
                              "name": "reservePoolToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18127,
                              "src": "28554:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                "typeString": "contract ISmartToken"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "28533:38:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18156,
                              "name": "reserveTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9036,
                              "src": "28574:13:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                                "typeString": "contract IERC20Token[] storage ref"
                              }
                            },
                            "id": 18158,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18157,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18117,
                              "src": "28588:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "28574:16:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "src": "28533:57:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "id": 18160,
                        "nodeType": "ExpressionStatement",
                        "src": "28533:57:28"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 18122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 18120,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18117,
                      "src": "28119:1:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 18121,
                      "name": "reserveCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18112,
                      "src": "28123:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28119:16:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18162,
                  "initializationExpression": {
                    "assignments": [
                      18117
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 18117,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 18162,
                        "src": "28104:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 18116,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28104:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 18119,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18118,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28116:1:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "28104:13:28"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 18124,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "28137:3:28",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 18123,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18117,
                        "src": "28137:1:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 18125,
                    "nodeType": "ExpressionStatement",
                    "src": "28137:3:28"
                  },
                  "nodeType": "ForStatement",
                  "src": "28099:503:28"
                }
              ]
            },
            "documentation": {
              "id": 18084,
              "nodeType": "StructuredDocumentation",
              "src": "27554:234:28",
              "text": " @dev creates the converter's pool tokens\n note that technically pool tokens can be created on deployment but gas limit\n might get too high for a block, so creating them on first activation"
            },
            "id": 18164,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createPoolTokens",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18085,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27819:2:28"
            },
            "returnParameters": {
              "id": 18086,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27831:0:28"
            },
            "scope": 18367,
            "src": "27794:815:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18185,
              "nodeType": "Block",
              "src": "28808:192:28",
              "statements": [
                {
                  "assignments": [
                    18171,
                    18173
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18171,
                      "mutability": "mutable",
                      "name": "latestRateN",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18185,
                      "src": "28820:19:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18170,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28820:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 18173,
                      "mutability": "mutable",
                      "name": "latestRateD",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18185,
                      "src": "28841:19:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18172,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28841:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18179,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18176,
                        "name": "primaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16667,
                        "src": "28887:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18177,
                        "name": "secondaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16669,
                        "src": "28908:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18174,
                        "name": "priceOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16665,
                        "src": "28864:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                          "typeString": "contract IPriceOracle"
                        }
                      },
                      "id": 18175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "latestRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23206,
                      "src": "28864:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token) view external returns (uint256,uint256)"
                      }
                    },
                    "id": 18178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28864:66:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28819:111:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18181,
                        "name": "latestRateN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18171,
                        "src": "28962:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18182,
                        "name": "latestRateD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18173,
                        "src": "28978:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18180,
                      "name": "Fraction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22916,
                      "src": "28948:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Fraction_$22916_storage_ptr_$",
                        "typeString": "type(struct Fraction storage pointer)"
                      }
                    },
                    "id": 18183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [
                      "n",
                      "d"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "28948:44:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                      "typeString": "struct Fraction memory"
                    }
                  },
                  "functionReturnParameters": 18169,
                  "id": 18184,
                  "nodeType": "Return",
                  "src": "28941:51:28"
                }
              ]
            },
            "documentation": {
              "id": 18165,
              "nodeType": "StructuredDocumentation",
              "src": "28617:114:28",
              "text": " @dev returns the effective rate between the two reserve tokens\n @return rate"
            },
            "id": 18186,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_effectiveTokensRate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18166,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28766:2:28"
            },
            "returnParameters": {
              "id": 18169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18168,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18186,
                  "src": "28791:15:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                    "typeString": "struct Fraction"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18167,
                    "name": "Fraction",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22916,
                    "src": "28791:8:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                      "typeString": "struct Fraction"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28790:17:28"
            },
            "scope": 18367,
            "src": "28737:263:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18204,
              "nodeType": "Block",
              "src": "29209:137:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18190,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9040,
                              "src": "29221:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                              }
                            },
                            "id": 18192,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18191,
                              "name": "primaryReserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16667,
                              "src": "29230:19:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "29221:29:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                              "typeString": "struct ConverterBase.Reserve storage ref"
                            }
                          },
                          "id": 18193,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "weight",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9016,
                          "src": "29221:36:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18194,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9040,
                              "src": "29259:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                              }
                            },
                            "id": 18196,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18195,
                              "name": "secondaryReserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16669,
                              "src": "29268:21:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "29259:31:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                              "typeString": "struct ConverterBase.Reserve storage ref"
                            }
                          },
                          "id": 18197,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "weight",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9016,
                          "src": "29259:38:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "id": 18198,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "29220:78:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                        "typeString": "tuple(uint32,uint32)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 18200,
                          "name": "externalRate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16683,
                          "src": "29325:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                            "typeString": "struct Fraction storage ref"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                            "typeString": "struct Fraction storage ref"
                          }
                        ],
                        "id": 18199,
                        "name": "effectiveReserveWeights",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          17238,
                          18276
                        ],
                        "referencedDeclaration": 18276,
                        "src": "29301:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Fraction_$22916_memory_ptr_$returns$_t_uint32_$_t_uint32_$",
                          "typeString": "function (struct Fraction memory) view returns (uint32,uint32)"
                        }
                      },
                      "id": 18201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29301:37:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                        "typeString": "tuple(uint32,uint32)"
                      }
                    },
                    "src": "29220:118:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18203,
                  "nodeType": "ExpressionStatement",
                  "src": "29220:118:28"
                }
              ]
            },
            "documentation": {
              "id": 18187,
              "nodeType": "StructuredDocumentation",
              "src": "29008:166:28",
              "text": " @dev updates the pool's reserve weights with new values in order to push the current primary\n reserve token balance to its staked balance"
            },
            "id": 18205,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rebalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18188,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29198:2:28"
            },
            "returnParameters": {
              "id": 18189,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29209:0:28"
            },
            "scope": 18367,
            "src": "29180:166:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18228,
              "nodeType": "Block",
              "src": "29700:122:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 18222,
                            "name": "reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "29782:8:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                            }
                          },
                          "id": 18224,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 18223,
                            "name": "_reserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18208,
                            "src": "29791:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29782:23:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                            "typeString": "struct ConverterBase.Reserve storage ref"
                          }
                        },
                        "id": 18225,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9014,
                        "src": "29782:31:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 18219,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 18217,
                              "name": "AMPLIFICATION_FACTOR",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16663,
                              "src": "29752:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 18218,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "29775:1:28",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "29752:24:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18213,
                              "name": "stakedBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16673,
                              "src": "29718:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                                "typeString": "mapping(contract IERC20Token => uint256)"
                              }
                            },
                            "id": 18215,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18214,
                              "name": "_reserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18208,
                              "src": "29733:13:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "29718:29:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22661,
                          "src": "29718:33:28",
                          "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": 18220,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "29718:59:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 18221,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22605,
                      "src": "29718:63:28",
                      "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": 18226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29718:96:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 18212,
                  "id": 18227,
                  "nodeType": "Return",
                  "src": "29711:103:28"
                }
              ]
            },
            "documentation": {
              "id": 18206,
              "nodeType": "StructuredDocumentation",
              "src": "29354:255:28",
              "text": " @dev returns the amplified balance of a given reserve token\n this version skips the input validation (gas optimization)\n @param _reserveToken   reserve token address\n @return amplified balance"
            },
            "id": 18229,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "amplifiedBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18209,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18208,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18229,
                  "src": "29641:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18207,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "29641:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29640:27:28"
            },
            "returnParameters": {
              "id": 18212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18211,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18229,
                  "src": "29691:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18210,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29691:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29690:9:28"
            },
            "scope": 18367,
            "src": "29615:207:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18275,
              "nodeType": "Block",
              "src": "30220:609:28",
              "statements": [
                {
                  "assignments": [
                    18240
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18240,
                      "mutability": "mutable",
                      "name": "primaryStakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18275,
                      "src": "30282:28:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18239,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30282:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18244,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 18241,
                      "name": "stakedBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16673,
                      "src": "30313:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20Token => uint256)"
                      }
                    },
                    "id": 18243,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 18242,
                      "name": "primaryReserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16667,
                      "src": "30328:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "30313:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30282:66:28"
                },
                {
                  "assignments": [
                    18246
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18246,
                      "mutability": "mutable",
                      "name": "primaryBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18275,
                      "src": "30407:22:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18245,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30407:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18250,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18248,
                        "name": "primaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16667,
                        "src": "30449:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18247,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "30432:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30432:37:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30407:62:28"
                },
                {
                  "assignments": [
                    18252
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18252,
                      "mutability": "mutable",
                      "name": "secondaryBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18275,
                      "src": "30480:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18251,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30480:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18256,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18254,
                        "name": "secondaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16669,
                        "src": "30524:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18253,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "30507:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30507:39:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30480:66:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18265,
                            "name": "AMPLIFICATION_FACTOR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16663,
                            "src": "30695:20:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 18263,
                            "name": "primaryStakedBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18240,
                            "src": "30670:20:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18264,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22661,
                          "src": "30670:24:28",
                          "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": 18266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30670:46:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18267,
                        "name": "primaryBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18246,
                        "src": "30731:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18268,
                        "name": "secondaryBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18252,
                        "src": "30760:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18269,
                          "name": "_rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18232,
                          "src": "30791:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                            "typeString": "struct Fraction memory"
                          }
                        },
                        "id": 18270,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "n",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22913,
                        "src": "30791:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18271,
                          "name": "_rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18232,
                          "src": "30813:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                            "typeString": "struct Fraction memory"
                          }
                        },
                        "id": 18272,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "d",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22915,
                        "src": "30813:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 18259,
                                "name": "BANCOR_FORMULA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21867,
                                "src": "30623:14:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 18258,
                              "name": "addressOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22052,
                              "src": "30613:9:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) view returns (address)"
                              }
                            },
                            "id": 18260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "30613:25:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18257,
                          "name": "IBancorFormula",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13177,
                          "src": "30598:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBancorFormula_$13177_$",
                            "typeString": "type(contract IBancorFormula)"
                          }
                        },
                        "id": 18261,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30598:41:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBancorFormula_$13177",
                          "typeString": "contract IBancorFormula"
                        }
                      },
                      "id": 18262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balancedWeights",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13176,
                      "src": "30598:57:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint32_$_t_uint32_$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256) view external returns (uint32,uint32)"
                      }
                    },
                    "id": 18273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30598:223:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                      "typeString": "tuple(uint32,uint32)"
                    }
                  },
                  "functionReturnParameters": 18238,
                  "id": 18274,
                  "nodeType": "Return",
                  "src": "30591:230:28"
                }
              ]
            },
            "documentation": {
              "id": 18230,
              "nodeType": "StructuredDocumentation",
              "src": "29830:290:28",
              "text": " @dev returns the effective reserve weights based on the staked balance, current balance and oracle price\n @param _rate    rate between the reserve tokens\n @return new primary reserve weight\n @return new secondary reserve weight"
            },
            "id": 18276,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "effectiveReserveWeights",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18233,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18232,
                  "mutability": "mutable",
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18276,
                  "src": "30159:21:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                    "typeString": "struct Fraction"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18231,
                    "name": "Fraction",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22916,
                    "src": "30159:8:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                      "typeString": "struct Fraction"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30158:23:28"
            },
            "returnParameters": {
              "id": 18238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18235,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18276,
                  "src": "30204:6:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18234,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "30204:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18237,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18276,
                  "src": "30212:6:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18236,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "30212:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30203:16:28"
            },
            "scope": 18367,
            "src": "30126:703:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18336,
              "nodeType": "Block",
              "src": "31393:577:28",
              "statements": [
                {
                  "assignments": [
                    18289
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18289,
                      "mutability": "mutable",
                      "name": "token1Balance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18336,
                      "src": "31443:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18288,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31443:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18293,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18291,
                        "name": "_token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18279,
                        "src": "31484:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18290,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "31467:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31467:25:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31443:49:28"
                },
                {
                  "assignments": [
                    18295
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18295,
                      "mutability": "mutable",
                      "name": "token2Balance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18336,
                      "src": "31503:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18294,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31503:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18299,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18297,
                        "name": "_token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18281,
                        "src": "31544:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18296,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "31527:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31527:25:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31503:49:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 18302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 18300,
                      "name": "_token1Weight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18283,
                      "src": "31608:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18301,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31625:1:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31608:18:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18311,
                  "nodeType": "IfStatement",
                  "src": "31604:91:28",
                  "trueBody": {
                    "id": 18310,
                    "nodeType": "Block",
                    "src": "31628:67:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18303,
                            "name": "_token1Weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18283,
                            "src": "31643:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 18304,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9040,
                                "src": "31659:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                  "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                }
                              },
                              "id": 18306,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18305,
                                "name": "_token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18279,
                                "src": "31668:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                  "typeString": "contract IERC20Token"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "31659:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                "typeString": "struct ConverterBase.Reserve storage ref"
                              }
                            },
                            "id": 18307,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "weight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9016,
                            "src": "31659:24:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "31643:40:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 18309,
                        "nodeType": "ExpressionStatement",
                        "src": "31643:40:28"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 18314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 18312,
                      "name": "_token2Weight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18285,
                      "src": "31751:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31768:1:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31751:18:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18322,
                  "nodeType": "IfStatement",
                  "src": "31747:97:28",
                  "trueBody": {
                    "id": 18321,
                    "nodeType": "Block",
                    "src": "31771:73:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18315,
                            "name": "_token2Weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18285,
                            "src": "31786:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "id": 18318,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 18316,
                              "name": "PPM_RESOLUTION",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9007,
                              "src": "31802:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 18317,
                              "name": "_token1Weight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18283,
                              "src": "31819:13:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "src": "31802:30:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "31786:46:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 18320,
                        "nodeType": "ExpressionStatement",
                        "src": "31786:46:28"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18324,
                        "name": "_token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18279,
                        "src": "31877:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18325,
                        "name": "_token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18281,
                        "src": "31886:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18328,
                            "name": "_token1Weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18283,
                            "src": "31913:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 18326,
                            "name": "token2Balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18295,
                            "src": "31895:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22661,
                          "src": "31895:17:28",
                          "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": 18329,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31895:32:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18332,
                            "name": "_token2Weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18285,
                            "src": "31947:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 18330,
                            "name": "token1Balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18289,
                            "src": "31929:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22661,
                          "src": "31929:17:28",
                          "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": 18333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31929:32:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18323,
                      "name": "TokenRateUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9089,
                      "src": "31861:15:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint256,uint256)"
                      }
                    },
                    "id": 18334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31861:101:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18335,
                  "nodeType": "EmitStatement",
                  "src": "31856:106:28"
                }
              ]
            },
            "documentation": {
              "id": 18277,
              "nodeType": "StructuredDocumentation",
              "src": "30837:418:28",
              "text": " @dev dispatches token rate update event for the reserve tokens\n @param _token1          contract address of the token to calculate the rate of one unit of\n @param _token2          contract address of the token to calculate the rate of one `_token1` unit in\n @param _token1Weight    reserve weight of token1\n @param _token2Weight    reserve weight of token2"
            },
            "id": 18337,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "dispatchTokenRateUpdateEvent",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18286,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18279,
                  "mutability": "mutable",
                  "name": "_token1",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18337,
                  "src": "31299:19:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18278,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "31299:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18281,
                  "mutability": "mutable",
                  "name": "_token2",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18337,
                  "src": "31320:19:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18280,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "31320:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18283,
                  "mutability": "mutable",
                  "name": "_token1Weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18337,
                  "src": "31341:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18282,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "31341:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18285,
                  "mutability": "mutable",
                  "name": "_token2Weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18337,
                  "src": "31363:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18284,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "31363:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31298:86:28"
            },
            "returnParameters": {
              "id": 18287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31393:0:28"
            },
            "scope": 18367,
            "src": "31261:709:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18356,
              "nodeType": "Block",
              "src": "32385:115:28",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18348,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18340,
                        "src": "32417:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18349,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "32429:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 18350,
                          "name": "stakedBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16673,
                          "src": "32444:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                            "typeString": "mapping(contract IERC20Token => uint256)"
                          }
                        },
                        "id": 18352,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18351,
                          "name": "_reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18344,
                          "src": "32459:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "32444:29:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18353,
                        "name": "_poolTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18342,
                        "src": "32475:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18347,
                      "name": "TokenRateUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9089,
                      "src": "32401:15:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint256,uint256)"
                      }
                    },
                    "id": 18354,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32401:91:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18355,
                  "nodeType": "EmitStatement",
                  "src": "32396:96:28"
                }
              ]
            },
            "documentation": {
              "id": 18338,
              "nodeType": "StructuredDocumentation",
              "src": "31978:274:28",
              "text": " @dev dispatches token rate update event for one of the pool tokens\n @param _poolToken       address of the pool token\n @param _poolTokenSupply total pool token supply\n @param _reserveToken    address of the reserve token"
            },
            "id": 18357,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "dispatchPoolTokenRateUpdateEvent",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18345,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18340,
                  "mutability": "mutable",
                  "name": "_poolToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18357,
                  "src": "32300:22:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18339,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "32300:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18342,
                  "mutability": "mutable",
                  "name": "_poolTokenSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18357,
                  "src": "32324:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18341,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32324:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18344,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18357,
                  "src": "32350:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18343,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "32350:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32299:77:28"
            },
            "returnParameters": {
              "id": 18346,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32385:0:28"
            },
            "scope": 18367,
            "src": "32258:242:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18365,
              "nodeType": "Block",
              "src": "32620:29:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18363,
                    "name": "now",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": -17,
                    "src": "32638:3:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 18362,
                  "id": 18364,
                  "nodeType": "Return",
                  "src": "32631:10:28"
                }
              ]
            },
            "documentation": {
              "id": 18358,
              "nodeType": "StructuredDocumentation",
              "src": "32508:50:28",
              "text": " @dev returns the current time"
            },
            "id": 18366,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "time",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18359,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32577:2:28"
            },
            "returnParameters": {
              "id": 18362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18361,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18366,
                  "src": "32611:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18360,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32611:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32610:9:28"
            },
            "scope": 18367,
            "src": "32564:85:28",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 18368,
        "src": "741:31911:28"
      }
    ],
    "src": "52:32602:28"
  },
  "legacyAST": {
    "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/LiquidityPoolV2Converter.sol",
    "exportedSymbols": {
      "LiquidityPoolV2Converter": [
        18367
      ]
    },
    "id": 18368,
    "license": "SEE LICENSE IN LICENSE",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 16651,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "52:23:28"
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/PoolTokensContainer.sol",
        "file": "./PoolTokensContainer.sol",
        "id": 16652,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 18725,
        "src": "77:35:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v2/LiquidityPoolV2ConverterCustomFactory.sol",
        "file": "./LiquidityPoolV2ConverterCustomFactory.sol",
        "id": 16653,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 18457,
        "src": "114:53:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/LiquidityPoolConverter.sol",
        "file": "../../LiquidityPoolConverter.sol",
        "id": 16654,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 13078,
        "src": "169:42:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterFactory.sol",
        "file": "../../interfaces/IConverterFactory.sol",
        "id": 16655,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 13390,
        "src": "213:48:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IPriceOracle.sol",
        "file": "../../../utility/interfaces/IPriceOracle.sol",
        "id": 16656,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 23226,
        "src": "263:54:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Types.sol",
        "file": "../../../utility/Types.sol",
        "id": 16657,
        "nodeType": "ImportDirective",
        "scope": 18368,
        "sourceUnit": 22917,
        "src": "319:36:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 16659,
              "name": "LiquidityPoolConverter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13077,
              "src": "778:22:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_LiquidityPoolConverter_$13077",
                "typeString": "contract LiquidityPoolConverter"
              }
            },
            "id": 16660,
            "nodeType": "InheritanceSpecifier",
            "src": "778:22:28"
          }
        ],
        "contractDependencies": [
          10039,
          13077,
          13340,
          22053,
          22152,
          22576,
          22860,
          22909,
          22995,
          23181,
          23241
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 16658,
          "nodeType": "StructuredDocumentation",
          "src": "359:380:28",
          "text": " @dev Liquidity Pool v2 Converter\n The liquidity pool v2 converter is a specialized version of a converter that uses\n price oracles to rebalance the reserve weights in such a way that the primary token\n balance always strives to match the staked balance.\n This type of liquidity pool always has 2 reserves and the reserve weights are dynamic."
        },
        "fullyImplemented": true,
        "id": 18367,
        "linearizedBaseContracts": [
          18367,
          13077,
          10039,
          22576,
          22053,
          22909,
          22995,
          22152,
          22860,
          23241,
          13340,
          23181
        ],
        "name": "LiquidityPoolV2Converter",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 16663,
            "mutability": "constant",
            "name": "AMPLIFICATION_FACTOR",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "808:49:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 16661,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "808:5:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3230",
              "id": 16662,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "855:2:28",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "2630c12f",
            "id": 16665,
            "mutability": "mutable",
            "name": "priceOracle",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "931:31:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IPriceOracle_$23225",
              "typeString": "contract IPriceOracle"
            },
            "typeName": {
              "contractScope": null,
              "id": 16664,
              "name": "IPriceOracle",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23225,
              "src": "931:12:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                "typeString": "contract IPriceOracle"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "0337e3fb",
            "id": 16667,
            "mutability": "mutable",
            "name": "primaryReserveToken",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1029:38:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IERC20Token_$21461",
              "typeString": "contract IERC20Token"
            },
            "typeName": {
              "contractScope": null,
              "id": 16666,
              "name": "IERC20Token",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21461,
              "src": "1029:11:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                "typeString": "contract IERC20Token"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "dc75eb9a",
            "id": 16669,
            "mutability": "mutable",
            "name": "secondaryReserveToken",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1133:40:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IERC20Token_$21461",
              "typeString": "contract IERC20Token"
            },
            "typeName": {
              "contractScope": null,
              "id": 16668,
              "name": "IERC20Token",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21461,
              "src": "1133:11:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                "typeString": "contract IERC20Token"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 16673,
            "mutability": "mutable",
            "name": "stakedBalances",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1247:55:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
              "typeString": "mapping(contract IERC20Token => uint256)"
            },
            "typeName": {
              "id": 16672,
              "keyType": {
                "contractScope": null,
                "id": 16670,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21461,
                "src": "1256:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                  "typeString": "contract IERC20Token"
                }
              },
              "nodeType": "Mapping",
              "src": "1247:32:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                "typeString": "mapping(contract IERC20Token => uint256)"
              },
              "valueType": {
                "id": 16671,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1271:7:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 16677,
            "mutability": "mutable",
            "name": "reservesToPoolTokens",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1377:65:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
              "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
            },
            "typeName": {
              "id": 16676,
              "keyType": {
                "contractScope": null,
                "id": 16674,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21461,
                "src": "1386:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                  "typeString": "contract IERC20Token"
                }
              },
              "nodeType": "Mapping",
              "src": "1377:36:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
                "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
              },
              "valueType": {
                "contractScope": null,
                "id": 16675,
                "name": "ISmartToken",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21516,
                "src": "1401:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ISmartToken_$21516",
                  "typeString": "contract ISmartToken"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 16681,
            "mutability": "mutable",
            "name": "poolTokensToReserves",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1489:65:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
              "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
            },
            "typeName": {
              "id": 16680,
              "keyType": {
                "contractScope": null,
                "id": 16678,
                "name": "ISmartToken",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21516,
                "src": "1498:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ISmartToken_$21516",
                  "typeString": "contract ISmartToken"
                }
              },
              "nodeType": "Mapping",
              "src": "1489:36:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
              },
              "valueType": {
                "contractScope": null,
                "id": 16679,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21461,
                "src": "1513:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                  "typeString": "contract IERC20Token"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "functionSelector": "ab28b174",
            "id": 16683,
            "mutability": "mutable",
            "name": "externalRate",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1603:28:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Fraction_$22916_storage",
              "typeString": "struct Fraction"
            },
            "typeName": {
              "contractScope": null,
              "id": 16682,
              "name": "Fraction",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22916,
              "src": "1603:8:28",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                "typeString": "struct Fraction"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "fd2d6c7c",
            "id": 16685,
            "mutability": "mutable",
            "name": "externalRateUpdateTime",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1704:37:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 16684,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1704:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "98a71dcb",
            "id": 16689,
            "mutability": "mutable",
            "name": "maxStakedBalances",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1874:57:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
              "typeString": "mapping(contract IERC20Token => uint256)"
            },
            "typeName": {
              "id": 16688,
              "keyType": {
                "contractScope": null,
                "id": 16686,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21461,
                "src": "1883:11:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                  "typeString": "contract IERC20Token"
                }
              },
              "nodeType": "Mapping",
              "src": "1874:32:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                "typeString": "mapping(contract IERC20Token => uint256)"
              },
              "valueType": {
                "id": 16687,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1898:7:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "0a55fb3d",
            "id": 16692,
            "mutability": "mutable",
            "name": "maxStakedBalanceEnabled",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1938:42:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 16690,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1938:4:28",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "74727565",
              "id": 16691,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1976:4:28",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "true"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "34d084b9",
            "id": 16695,
            "mutability": "mutable",
            "name": "oracleDeviationFee",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 18367,
            "src": "1989:40:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 16693,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1989:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3130303030",
              "id": 16694,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2024:5:28",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000_by_1",
                "typeString": "int_const 10000"
              },
              "value": "10000"
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 16696,
              "nodeType": "StructuredDocumentation",
              "src": "2082:226:28",
              "text": " @dev triggered when the oracle deviation fee is updated\n @param  _prevFee    previous fee percentage, represented in ppm\n @param  _newFee     new fee percentage, represented in ppm"
            },
            "id": 16702,
            "name": "OracleDeviationFeeUpdate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16698,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_prevFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16702,
                  "src": "2345:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 16697,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2345:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16700,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16702,
                  "src": "2362:14:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 16699,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2362:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2344:33:28"
            },
            "src": "2314:64:28"
          },
          {
            "body": {
              "id": 16717,
              "nodeType": "Block",
              "src": "2938:8:28",
              "statements": []
            },
            "documentation": {
              "id": 16703,
              "nodeType": "StructuredDocumentation",
              "src": "2386:340:28",
              "text": " @dev initializes a new LiquidityPoolV2Converter instance\n @param  _poolTokensContainer    pool tokens container governed by the converter\n @param  _registry               address of a contract registry contract\n @param  _maxConversionFee       maximum conversion fee, represented in ppm"
            },
            "id": 16718,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 16712,
                    "name": "_poolTokensContainer",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16705,
                    "src": "2881:20:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                      "typeString": "contract IPoolTokensContainer"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 16713,
                    "name": "_registry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16707,
                    "src": "2903:9:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$23165",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 16714,
                    "name": "_maxConversionFee",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16709,
                    "src": "2914:17:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  }
                ],
                "id": 16715,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16711,
                  "name": "LiquidityPoolConverter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 13077,
                  "src": "2858:22:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_LiquidityPoolConverter_$13077_$",
                    "typeString": "type(contract LiquidityPoolConverter)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2858:74:28"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 16710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16705,
                  "mutability": "mutable",
                  "name": "_poolTokensContainer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16718,
                  "src": "2744:41:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                    "typeString": "contract IPoolTokensContainer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16704,
                    "name": "IPoolTokensContainer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 18801,
                    "src": "2744:20:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                      "typeString": "contract IPoolTokensContainer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16707,
                  "mutability": "mutable",
                  "name": "_registry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16718,
                  "src": "2787:27:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IContractRegistry_$23165",
                    "typeString": "contract IContractRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16706,
                    "name": "IContractRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 23165,
                    "src": "2787:17:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$23165",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16709,
                  "mutability": "mutable",
                  "name": "_maxConversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16718,
                  "src": "2816:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 16708,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2816:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2743:98:28"
            },
            "returnParameters": {
              "id": 16716,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2938:0:28"
            },
            "scope": 18367,
            "src": "2732:214:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 16727,
              "nodeType": "Block",
              "src": "3044:56:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16723,
                        "name": "_address",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16720,
                        "src": "3071:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      ],
                      "id": 16722,
                      "name": "_validPoolToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16749,
                      "src": "3055:15:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ISmartToken_$21516_$returns$__$",
                        "typeString": "function (contract ISmartToken) view"
                      }
                    },
                    "id": 16724,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3055:25:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16725,
                  "nodeType": "ExpressionStatement",
                  "src": "3055:25:28"
                },
                {
                  "id": 16726,
                  "nodeType": "PlaceholderStatement",
                  "src": "3091:1:28"
                }
              ]
            },
            "documentation": null,
            "id": 16728,
            "name": "validPoolToken",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 16721,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16720,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16728,
                  "src": "3022:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16719,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "3022:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3021:22:28"
            },
            "src": "2998:102:28",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 16748,
              "nodeType": "Block",
              "src": "3216:107:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 16744,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 16736,
                                "name": "poolTokensToReserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16681,
                                "src": "3243:20:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                                  "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
                                }
                              },
                              "id": 16738,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 16737,
                                "name": "_address",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16730,
                                "src": "3264:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                  "typeString": "contract ISmartToken"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3243:30:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            ],
                            "id": 16735,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3235:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 16734,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3235:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 16739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3235:39:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 16742,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3286:1:28",
                              "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": 16741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3278:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 16740,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3278:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 16743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3278:10:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3235:53:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f504f4f4c5f544f4b454e",
                        "id": 16745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3290:24:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_eed1b5de9a98cde04e371329406f26607f5671e3e7b23ea150ebcb6d35102f1f",
                          "typeString": "literal_string \"ERR_INVALID_POOL_TOKEN\""
                        },
                        "value": "ERR_INVALID_POOL_TOKEN"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_eed1b5de9a98cde04e371329406f26607f5671e3e7b23ea150ebcb6d35102f1f",
                          "typeString": "literal_string \"ERR_INVALID_POOL_TOKEN\""
                        }
                      ],
                      "id": 16733,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3227:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3227:88:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16747,
                  "nodeType": "ExpressionStatement",
                  "src": "3227:88:28"
                }
              ]
            },
            "documentation": null,
            "id": 16749,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validPoolToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 16731,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16730,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16749,
                  "src": "3180:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16729,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "3180:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3179:22:28"
            },
            "returnParameters": {
              "id": 16732,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3216:0:28"
            },
            "scope": 18367,
            "src": "3155:168:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              9242
            ],
            "body": {
              "id": 16758,
              "nodeType": "Block",
              "src": "3531:27:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "32",
                    "id": 16756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3549:1:28",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "functionReturnParameters": 16755,
                  "id": 16757,
                  "nodeType": "Return",
                  "src": "3542:8:28"
                }
              ]
            },
            "documentation": {
              "id": 16750,
              "nodeType": "StructuredDocumentation",
              "src": "3331:131:28",
              "text": " @dev returns the converter type\n @return see the converter types in the the main contract doc"
            },
            "functionSelector": "3e8ff43f",
            "id": 16759,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "converterType",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16752,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3505:8:28"
            },
            "parameters": {
              "id": 16751,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3490:2:28"
            },
            "returnParameters": {
              "id": 16755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16754,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16759,
                  "src": "3523:6:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 16753,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3523:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3522:8:28"
            },
            "scope": 18367,
            "src": "3468:90:28",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9362
            ],
            "body": {
              "id": 16780,
              "nodeType": "Block",
              "src": "3785:80:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 16778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 16766,
                          "name": "super",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -25,
                          "src": "3803:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_super$_LiquidityPoolV2Converter_$18367",
                            "typeString": "contract super LiquidityPoolV2Converter"
                          }
                        },
                        "id": 16767,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isActive",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9362,
                        "src": "3803:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 16768,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3803:16:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 16777,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 16771,
                            "name": "priceOracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16665,
                            "src": "3831:11:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                              "typeString": "contract IPriceOracle"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                              "typeString": "contract IPriceOracle"
                            }
                          ],
                          "id": 16770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3823:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16769,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3823:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 16772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3823:20:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 16775,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3855:1:28",
                            "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": 16774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3847:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16773,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3847:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 16776,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3847:10:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "3823:34:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3803:54:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 16765,
                  "id": 16779,
                  "nodeType": "Return",
                  "src": "3796:61:28"
                }
              ]
            },
            "documentation": {
              "id": 16760,
              "nodeType": "StructuredDocumentation",
              "src": "3566:157:28",
              "text": " @dev returns true if the converter is active, false otherwise\n @return true if the converter is active, false otherwise"
            },
            "functionSelector": "22f3e2d4",
            "id": 16781,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isActive",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16762,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3761:8:28"
            },
            "parameters": {
              "id": 16761,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3746:2:28"
            },
            "returnParameters": {
              "id": 16765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16764,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16781,
                  "src": "3779:4:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16763,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3779:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3778:6:28"
            },
            "scope": 18367,
            "src": "3729:136:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 16981,
              "nodeType": "Block",
              "src": "4988:2187:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 16830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 16823,
                              "name": "anchor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9030,
                              "src": "5045:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                "typeString": "contract IConverterAnchor"
                              }
                            },
                            "id": 16824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 23172,
                            "src": "5045:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 16825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5045:14:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 16828,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "5071:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                "typeString": "contract LiquidityPoolV2Converter"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                "typeString": "contract LiquidityPoolV2Converter"
                              }
                            ],
                            "id": 16827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5063:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 16826,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5063:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 16829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5063:13:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5045:31:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f414e43484f525f4e4f545f4f574e4544",
                        "id": 16831,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5078:22:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_177ebf4a5417e29571b85651bfed4f759bbb0c457a65f31f55950233ecfaf584",
                          "typeString": "literal_string \"ERR_ANCHOR_NOT_OWNED\""
                        },
                        "value": "ERR_ANCHOR_NOT_OWNED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_177ebf4a5417e29571b85651bfed4f759bbb0c457a65f31f55950233ecfaf584",
                          "typeString": "literal_string \"ERR_ANCHOR_NOT_OWNED\""
                        }
                      ],
                      "id": 16822,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5037:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5037:64:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16833,
                  "nodeType": "ExpressionStatement",
                  "src": "5037:64:28"
                },
                {
                  "assignments": [
                    16835
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16835,
                      "mutability": "mutable",
                      "name": "oracleWhitelist",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 16981,
                      "src": "5143:26:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWhitelist_$23251",
                        "typeString": "contract IWhitelist"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 16834,
                        "name": "IWhitelist",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 23251,
                        "src": "5143:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWhitelist_$23251",
                          "typeString": "contract IWhitelist"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16841,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 16838,
                            "name": "CHAINLINK_ORACLE_WHITELIST",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21894,
                            "src": "5193:26:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 16837,
                          "name": "addressOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22052,
                          "src": "5183:9:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 16839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5183:37:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16836,
                      "name": "IWhitelist",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23251,
                      "src": "5172:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IWhitelist_$23251_$",
                        "typeString": "type(contract IWhitelist)"
                      }
                    },
                    "id": 16840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5172:49:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IWhitelist_$23251",
                      "typeString": "contract IWhitelist"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5143:78:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 16857,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 16847,
                                  "name": "_primaryReserveOracle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16786,
                                  "src": "5278:21:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                                    "typeString": "contract IChainlinkPriceOracle"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                                    "typeString": "contract IChainlinkPriceOracle"
                                  }
                                ],
                                "id": 16846,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5270:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 16845,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5270:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 16848,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5270:30:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 16843,
                              "name": "oracleWhitelist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16835,
                              "src": "5240:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IWhitelist_$23251",
                                "typeString": "contract IWhitelist"
                              }
                            },
                            "id": 16844,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isWhitelisted",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 23250,
                            "src": "5240:29:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view external returns (bool)"
                            }
                          },
                          "id": 16849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5240:61:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 16854,
                                  "name": "_secondaryReserveOracle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16788,
                                  "src": "5360:23:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                                    "typeString": "contract IChainlinkPriceOracle"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                                    "typeString": "contract IChainlinkPriceOracle"
                                  }
                                ],
                                "id": 16853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5352:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 16852,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5352:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 16855,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5352:32:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 16850,
                              "name": "oracleWhitelist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16835,
                              "src": "5322:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IWhitelist_$23251",
                                "typeString": "contract IWhitelist"
                              }
                            },
                            "id": 16851,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isWhitelisted",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 23250,
                            "src": "5322:29:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view external returns (bool)"
                            }
                          },
                          "id": 16856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5322:63:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5240:145:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f4f5241434c45",
                        "id": 16858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5387:20:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_838cc927fcaf7c7c6b40a2418c9d314e4eaed53a6395fa4bccbb5e6a4666df25",
                          "typeString": "literal_string \"ERR_INVALID_ORACLE\""
                        },
                        "value": "ERR_INVALID_ORACLE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_838cc927fcaf7c7c6b40a2418c9d314e4eaed53a6395fa4bccbb5e6a4666df25",
                          "typeString": "literal_string \"ERR_INVALID_ORACLE\""
                        }
                      ],
                      "id": 16842,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5232:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5232:176:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16860,
                  "nodeType": "ExpressionStatement",
                  "src": "5232:176:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 16861,
                      "name": "createPoolTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18164,
                      "src": "5496:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 16862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5496:18:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16863,
                  "nodeType": "ExpressionStatement",
                  "src": "5496:18:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 16866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 16864,
                      "name": "primaryReserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16667,
                      "src": "5583:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 16865,
                      "name": "_primaryReserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16784,
                      "src": "5605:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "5583:42:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "id": 16867,
                  "nodeType": "ExpressionStatement",
                  "src": "5583:42:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 16872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 16868,
                      "name": "_primaryReserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16784,
                      "src": "5640:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 16869,
                        "name": "reserveTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9036,
                        "src": "5664:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                          "typeString": "contract IERC20Token[] storage ref"
                        }
                      },
                      "id": 16871,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 16870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5678:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5664:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "5640:40:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 16883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 16879,
                        "name": "secondaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16669,
                        "src": "5764:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 16880,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "5788:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 16882,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 16881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5802:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5788:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "src": "5764:40:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "id": 16884,
                    "nodeType": "ExpressionStatement",
                    "src": "5764:40:28"
                  },
                  "id": 16885,
                  "nodeType": "IfStatement",
                  "src": "5636:168:28",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 16877,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 16873,
                        "name": "secondaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16669,
                        "src": "5695:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 16874,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "5719:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 16876,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 16875,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5733:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5719:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "src": "5695:40:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "id": 16878,
                    "nodeType": "ExpressionStatement",
                    "src": "5695:40:28"
                  }
                },
                {
                  "assignments": [
                    16887
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16887,
                      "mutability": "mutable",
                      "name": "customFactory",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 16981,
                      "src": "5892:51:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_LiquidityPoolV2ConverterCustomFactory_$18456",
                        "typeString": "contract LiquidityPoolV2ConverterCustomFactory"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 16886,
                        "name": "LiquidityPoolV2ConverterCustomFactory",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 18456,
                        "src": "5892:37:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_LiquidityPoolV2ConverterCustomFactory_$18456",
                          "typeString": "contract LiquidityPoolV2ConverterCustomFactory"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16902,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 16897,
                                  "name": "converterType",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    16759
                                  ],
                                  "referencedDeclaration": 16759,
                                  "src": "6069:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint16_$",
                                    "typeString": "function () pure returns (uint16)"
                                  }
                                },
                                "id": 16898,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6069:15:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 16893,
                                        "name": "CONVERTER_FACTORY",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21870,
                                        "src": "6033:17:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 16892,
                                      "name": "addressOf",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22052,
                                      "src": "6023:9:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                        "typeString": "function (bytes32) view returns (address)"
                                      }
                                    },
                                    "id": 16894,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6023:28:28",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 16891,
                                  "name": "IConverterFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13389,
                                  "src": "6005:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IConverterFactory_$13389_$",
                                    "typeString": "type(contract IConverterFactory)"
                                  }
                                },
                                "id": 16895,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6005:47:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IConverterFactory_$13389",
                                  "typeString": "contract IConverterFactory"
                                }
                              },
                              "id": 16896,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "customFactories",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13388,
                              "src": "6005:63:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_uint16_$returns$_t_contract$_ITypedConverterCustomFactory_$13688_$",
                                "typeString": "function (uint16) view external returns (contract ITypedConverterCustomFactory)"
                              }
                            },
                            "id": 16899,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6005:80:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ITypedConverterCustomFactory_$13688",
                              "typeString": "contract ITypedConverterCustomFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ITypedConverterCustomFactory_$13688",
                              "typeString": "contract ITypedConverterCustomFactory"
                            }
                          ],
                          "id": 16890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5997:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16889,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5997:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 16900,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5997:89:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16888,
                      "name": "LiquidityPoolV2ConverterCustomFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18456,
                      "src": "5959:37:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_LiquidityPoolV2ConverterCustomFactory_$18456_$",
                        "typeString": "type(contract LiquidityPoolV2ConverterCustomFactory)"
                      }
                    },
                    "id": 16901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5959:128:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_LiquidityPoolV2ConverterCustomFactory_$18456",
                      "typeString": "contract LiquidityPoolV2ConverterCustomFactory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5892:195:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 16911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 16903,
                      "name": "priceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16665,
                      "src": "6098:11:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                        "typeString": "contract IPriceOracle"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 16906,
                          "name": "_primaryReserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16784,
                          "src": "6158:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 16907,
                          "name": "secondaryReserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16669,
                          "src": "6193:21:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 16908,
                          "name": "_primaryReserveOracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16786,
                          "src": "6229:21:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                            "typeString": "contract IChainlinkPriceOracle"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 16909,
                          "name": "_secondaryReserveOracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16788,
                          "src": "6265:23:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                            "typeString": "contract IChainlinkPriceOracle"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          {
                            "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                            "typeString": "contract IChainlinkPriceOracle"
                          },
                          {
                            "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                            "typeString": "contract IChainlinkPriceOracle"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 16904,
                          "name": "customFactory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16887,
                          "src": "6112:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_LiquidityPoolV2ConverterCustomFactory_$18456",
                            "typeString": "contract LiquidityPoolV2ConverterCustomFactory"
                          }
                        },
                        "id": 16905,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "createPriceOracle",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18455,
                        "src": "6112:31:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_contract$_IChainlinkPriceOracle_$23155_$_t_contract$_IChainlinkPriceOracle_$23155_$returns$_t_contract$_IPriceOracle_$23225_$",
                          "typeString": "function (contract IERC20Token,contract IERC20Token,contract IChainlinkPriceOracle,contract IChainlinkPriceOracle) external returns (contract IPriceOracle)"
                        }
                      },
                      "id": 16910,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6112:177:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                        "typeString": "contract IPriceOracle"
                      }
                    },
                    "src": "6098:191:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                      "typeString": "contract IPriceOracle"
                    }
                  },
                  "id": 16912,
                  "nodeType": "ExpressionStatement",
                  "src": "6098:191:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 16916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 16913,
                      "name": "externalRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16683,
                      "src": "6302:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                        "typeString": "struct Fraction storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 16914,
                        "name": "_effectiveTokensRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18186,
                        "src": "6317:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Fraction_$22916_memory_ptr_$",
                          "typeString": "function () view returns (struct Fraction memory)"
                        }
                      },
                      "id": 16915,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6317:22:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                        "typeString": "struct Fraction memory"
                      }
                    },
                    "src": "6302:37:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                      "typeString": "struct Fraction storage ref"
                    }
                  },
                  "id": 16917,
                  "nodeType": "ExpressionStatement",
                  "src": "6302:37:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 16921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 16918,
                      "name": "externalRateUpdateTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16685,
                      "src": "6350:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 16919,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18366,
                        "src": "6375:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 16920,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6375:6:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6350:31:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 16922,
                  "nodeType": "ExpressionStatement",
                  "src": "6350:31:28"
                },
                {
                  "assignments": [
                    16924
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16924,
                      "mutability": "mutable",
                      "name": "primaryReserveStakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 16981,
                      "src": "6509:35:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16923,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6509:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16928,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16926,
                        "name": "primaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16667,
                        "src": "6568:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 16925,
                      "name": "reserveStakedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17023,
                      "src": "6547:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 16927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6547:41:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6509:79:28"
                },
                {
                  "assignments": [
                    16930
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16930,
                      "mutability": "mutable",
                      "name": "primaryReserveBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 16981,
                      "src": "6599:29:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16929,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6599:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16934,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16932,
                        "name": "primaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16667,
                        "src": "6646:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 16931,
                      "name": "reserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9699,
                      "src": "6631:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 16933,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6631:35:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6599:67:28"
                },
                {
                  "assignments": [
                    16936
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16936,
                      "mutability": "mutable",
                      "name": "secondaryReserveBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 16981,
                      "src": "6677:31:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16935,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6677:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 16940,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16938,
                        "name": "secondaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16669,
                        "src": "6726:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 16937,
                      "name": "reserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9699,
                      "src": "6711:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 16939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6711:37:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6677:71:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 16941,
                      "name": "primaryReserveStakedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16924,
                      "src": "6765:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 16942,
                      "name": "primaryReserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16930,
                      "src": "6796:21:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6765:52:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 16967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 16963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 16959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 16957,
                            "name": "primaryReserveStakedBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16924,
                            "src": "6978:27:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 16958,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7008:1:28",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6978:31:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 16962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 16960,
                            "name": "primaryReserveBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16930,
                            "src": "7013:21:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 16961,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7037:1:28",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7013:25:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6978:60:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16966,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 16964,
                          "name": "secondaryReserveBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16936,
                          "src": "7042:23:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 16965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7068:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7042:27:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "6978:91:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 16972,
                    "nodeType": "IfStatement",
                    "src": "6974:135:28",
                    "trueBody": {
                      "id": 16971,
                      "nodeType": "Block",
                      "src": "7071:38:28",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 16968,
                              "name": "rebalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18205,
                              "src": "7086:9:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                "typeString": "function ()"
                              }
                            },
                            "id": 16969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7086:11:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 16970,
                          "nodeType": "ExpressionStatement",
                          "src": "7086:11:28"
                        }
                      ]
                    }
                  },
                  "id": 16973,
                  "nodeType": "IfStatement",
                  "src": "6761:348:28",
                  "trueBody": {
                    "id": 16956,
                    "nodeType": "Block",
                    "src": "6819:140:28",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 16950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 16946,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 16944,
                              "name": "primaryReserveStakedBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16924,
                              "src": "6838:27:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 16945,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6868:1:28",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "6838:31:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 16949,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 16947,
                              "name": "secondaryReserveBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16936,
                              "src": "6873:23:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 16948,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6899:1:28",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "6873:27:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6838:62:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 16955,
                        "nodeType": "IfStatement",
                        "src": "6834:114:28",
                        "trueBody": {
                          "id": 16954,
                          "nodeType": "Block",
                          "src": "6902:46:28",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 16951,
                                  "name": "rebalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18205,
                                  "src": "6921:9:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                    "typeString": "function ()"
                                  }
                                },
                                "id": 16952,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6921:11:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 16953,
                              "nodeType": "ExpressionStatement",
                              "src": "6921:11:28"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 16975,
                          "name": "converterType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            16759
                          ],
                          "referencedDeclaration": 16759,
                          "src": "7137:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint16_$",
                            "typeString": "function () pure returns (uint16)"
                          }
                        },
                        "id": 16976,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7137:15:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 16977,
                        "name": "anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9030,
                        "src": "7154:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 16978,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7162:4:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 16974,
                      "name": "Activation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9063,
                      "src": "7126:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint16_$_t_contract$_IConverterAnchor_$13349_$_t_bool_$returns$__$",
                        "typeString": "function (uint16,contract IConverterAnchor,bool)"
                      }
                    },
                    "id": 16979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7126:41:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16980,
                  "nodeType": "EmitStatement",
                  "src": "7121:46:28"
                }
              ]
            },
            "documentation": {
              "id": 16782,
              "nodeType": "StructuredDocumentation",
              "src": "3873:625:28",
              "text": " @dev sets the pool's primary reserve token / price oracles and activates the pool\n each oracle must be able to provide the rate for each reserve token\n note that the oracle must be whitelisted prior to the call\n can only be called by the owner while the pool is inactive\n @param _primaryReserveToken     address of the pool's primary reserve token\n @param _primaryReserveOracle    address of a chainlink price oracle for the primary reserve token\n @param _secondaryReserveOracle  address of a chainlink price oracle for the secondary reserve token"
            },
            "functionSelector": "119b90cd",
            "id": 16982,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 16791,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16790,
                  "name": "inactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9151,
                  "src": "4701:8:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4701:8:28"
              },
              {
                "arguments": null,
                "id": 16793,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16792,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "4719:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4719:9:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 16795,
                    "name": "_primaryReserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16784,
                    "src": "4751:20:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 16796,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16794,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "4738:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4738:34:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16800,
                        "name": "_primaryReserveOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16786,
                        "src": "4798:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      ],
                      "id": 16799,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4790:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 16798,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4790:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 16801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4790:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 16802,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16797,
                  "name": "notThis",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22978,
                  "src": "4782:7:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4782:39:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16806,
                        "name": "_secondaryReserveOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16788,
                        "src": "4847:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      ],
                      "id": 16805,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4839:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 16804,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4839:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 16807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4839:32:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 16808,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16803,
                  "name": "notThis",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22978,
                  "src": "4831:7:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4831:41:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16812,
                        "name": "_primaryReserveOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16786,
                        "src": "4903:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      ],
                      "id": 16811,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4895:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 16810,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4895:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 16813,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4895:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 16814,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16809,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22952,
                  "src": "4882:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4882:44:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16818,
                        "name": "_secondaryReserveOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16788,
                        "src": "4957:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                          "typeString": "contract IChainlinkPriceOracle"
                        }
                      ],
                      "id": 16817,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4949:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 16816,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4949:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 16819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4949:32:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 16820,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16815,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22952,
                  "src": "4936:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4936:46:28"
              }
            ],
            "name": "activate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 16789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16784,
                  "mutability": "mutable",
                  "name": "_primaryReserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16982,
                  "src": "4532:32:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16783,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "4532:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16786,
                  "mutability": "mutable",
                  "name": "_primaryReserveOracle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16982,
                  "src": "4575:43:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                    "typeString": "contract IChainlinkPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16785,
                    "name": "IChainlinkPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 23155,
                    "src": "4575:21:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                      "typeString": "contract IChainlinkPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16788,
                  "mutability": "mutable",
                  "name": "_secondaryReserveOracle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 16982,
                  "src": "4629:45:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                    "typeString": "contract IChainlinkPriceOracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 16787,
                    "name": "IChainlinkPriceOracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 23155,
                    "src": "4629:21:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IChainlinkPriceOracle_$23155",
                      "typeString": "contract IChainlinkPriceOracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4521:154:28"
            },
            "returnParameters": {
              "id": 16821,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4988:0:28"
            },
            "scope": 18367,
            "src": "4504:2671:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17006,
              "nodeType": "Block",
              "src": "7471:233:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 16993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 16991,
                          "name": "_oracleDeviationFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16985,
                          "src": "7490:19:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 16992,
                          "name": "PPM_RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9007,
                          "src": "7513:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "7490:37:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f4f5241434c455f444556494154494f4e5f464545",
                        "id": 16994,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7529:34:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f9363eee098ac664b67b829736fb5ba7ccaf776da9324eed6c3da55aa01386f5",
                          "typeString": "literal_string \"ERR_INVALID_ORACLE_DEVIATION_FEE\""
                        },
                        "value": "ERR_INVALID_ORACLE_DEVIATION_FEE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f9363eee098ac664b67b829736fb5ba7ccaf776da9324eed6c3da55aa01386f5",
                          "typeString": "literal_string \"ERR_INVALID_ORACLE_DEVIATION_FEE\""
                        }
                      ],
                      "id": 16990,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7482:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7482:82:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16996,
                  "nodeType": "ExpressionStatement",
                  "src": "7482:82:28"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 16998,
                        "name": "oracleDeviationFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16695,
                        "src": "7605:18:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 16999,
                        "name": "_oracleDeviationFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16985,
                        "src": "7625:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 16997,
                      "name": "OracleDeviationFeeUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16702,
                      "src": "7580:24:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_uint32_$returns$__$",
                        "typeString": "function (uint32,uint32)"
                      }
                    },
                    "id": 17000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7580:65:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17001,
                  "nodeType": "EmitStatement",
                  "src": "7575:70:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 17002,
                      "name": "oracleDeviationFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16695,
                      "src": "7656:18:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 17003,
                      "name": "_oracleDeviationFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16985,
                      "src": "7677:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "7656:40:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 17005,
                  "nodeType": "ExpressionStatement",
                  "src": "7656:40:28"
                }
              ]
            },
            "documentation": {
              "id": 16983,
              "nodeType": "StructuredDocumentation",
              "src": "7183:206:28",
              "text": " @dev updates the current oracle deviation fee\n can only be called by the contract owner\n @param _oracleDeviationFee new oracle deviation fee, represented in ppm"
            },
            "functionSelector": "ddd9abbf",
            "id": 17007,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 16988,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 16987,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "7461:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7461:9:28"
              }
            ],
            "name": "setOracleDeviationFee",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 16986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16985,
                  "mutability": "mutable",
                  "name": "_oracleDeviationFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17007,
                  "src": "7426:26:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 16984,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7426:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7425:28:28"
            },
            "returnParameters": {
              "id": 16989,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7471:0:28"
            },
            "scope": 18367,
            "src": "7395:309:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17022,
              "nodeType": "Block",
              "src": "8056:55:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17018,
                      "name": "stakedBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16673,
                      "src": "8074:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20Token => uint256)"
                      }
                    },
                    "id": 17020,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17019,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17010,
                      "src": "8089:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8074:29:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17017,
                  "id": 17021,
                  "nodeType": "Return",
                  "src": "8067:36:28"
                }
              ]
            },
            "documentation": {
              "id": 17008,
              "nodeType": "StructuredDocumentation",
              "src": "7712:182:28",
              "text": " @dev returns the staked balance of a given reserve token\n @param _reserveToken    reserve token address\n @return staked balance"
            },
            "functionSelector": "005e319c",
            "id": 17023,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17013,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17010,
                    "src": "8009:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17014,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17012,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "7996:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7996:27:28"
              }
            ],
            "name": "reserveStakedBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17011,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17010,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17023,
                  "src": "7930:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17009,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "7930:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7929:27:28"
            },
            "returnParameters": {
              "id": 17017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17016,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17023,
                  "src": "8042:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17015,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8042:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8041:9:28"
            },
            "scope": 18367,
            "src": "7900:211:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17038,
              "nodeType": "Block",
              "src": "8471:57:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17035,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17026,
                        "src": "8506:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17034,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "8489:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 17036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8489:31:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17033,
                  "id": 17037,
                  "nodeType": "Return",
                  "src": "8482:38:28"
                }
              ]
            },
            "documentation": {
              "id": 17024,
              "nodeType": "StructuredDocumentation",
              "src": "8119:187:28",
              "text": " @dev returns the amplified balance of a given reserve token\n @param _reserveToken   reserve token address\n @return amplified balance"
            },
            "functionSelector": "2bd3c107",
            "id": 17039,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17029,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17026,
                    "src": "8424:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17030,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17028,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "8411:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8411:27:28"
              }
            ],
            "name": "reserveAmplifiedBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17026,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17039,
                  "src": "8345:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17025,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "8345:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8344:27:28"
            },
            "returnParameters": {
              "id": 17033,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17032,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17039,
                  "src": "8457:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17031,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8457:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8456:9:28"
            },
            "scope": 18367,
            "src": "8312:216:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17061,
              "nodeType": "Block",
              "src": "8999:59:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17055,
                        "name": "stakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16673,
                        "src": "9010:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17057,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17056,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17042,
                        "src": "9025:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9010:29:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 17058,
                      "name": "_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17044,
                      "src": "9042:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9010:40:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17060,
                  "nodeType": "ExpressionStatement",
                  "src": "9010:40:28"
                }
              ]
            },
            "documentation": {
              "id": 17040,
              "nodeType": "StructuredDocumentation",
              "src": "8536:268:28",
              "text": " @dev sets the reserve's staked balance\n can only be called by the upgrader contract while the upgrader is the owner\n @param _reserveToken    reserve token address\n @param _balance         new reserve staked balance"
            },
            "functionSelector": "bf7da6ba",
            "id": 17062,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17047,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17046,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "8913:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8913:9:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17049,
                    "name": "CONVERTER_UPGRADER",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21876,
                    "src": "8937:18:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 17050,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17048,
                  "name": "only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21911,
                  "src": "8932:4:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8932:24:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17052,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17042,
                    "src": "8979:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17053,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17051,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "8966:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8966:27:28"
              }
            ],
            "name": "setReserveStakedBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17045,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17042,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17062,
                  "src": "8843:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17041,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "8843:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17044,
                  "mutability": "mutable",
                  "name": "_balance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17062,
                  "src": "8870:16:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17043,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8870:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8842:45:28"
            },
            "returnParameters": {
              "id": 17054,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8999:0:28"
            },
            "scope": 18367,
            "src": "8810:248:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17088,
              "nodeType": "Block",
              "src": "9526:156:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17072,
                        "name": "maxStakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16689,
                        "src": "9537:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17076,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17073,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "9555:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17075,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 17074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9569:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9555:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9537:35:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 17077,
                      "name": "_reserve1MaxStakedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17065,
                      "src": "9575:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9537:63:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17079,
                  "nodeType": "ExpressionStatement",
                  "src": "9537:63:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17080,
                        "name": "maxStakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16689,
                        "src": "9611:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17084,
                      "indexExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17081,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "9629:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17083,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 17082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9643:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9629:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9611:35:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 17085,
                      "name": "_reserve2MaxStakedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17067,
                      "src": "9649:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9611:63:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17087,
                  "nodeType": "ExpressionStatement",
                  "src": "9611:63:28"
                }
              ]
            },
            "documentation": {
              "id": 17063,
              "nodeType": "StructuredDocumentation",
              "src": "9066:337:28",
              "text": " @dev sets the max staked balance for both reserves\n available as a temporary mechanism during the beta\n can only be called by the owner\n @param _reserve1MaxStakedBalance    max staked balance for reserve 1\n @param _reserve2MaxStakedBalance    max staked balance for reserve 2"
            },
            "functionSelector": "46749468",
            "id": 17089,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17070,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17069,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "9516:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9516:9:28"
              }
            ],
            "name": "setMaxStakedBalances",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17065,
                  "mutability": "mutable",
                  "name": "_reserve1MaxStakedBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17089,
                  "src": "9439:33:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17064,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9439:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17067,
                  "mutability": "mutable",
                  "name": "_reserve2MaxStakedBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17089,
                  "src": "9474:33:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17066,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9474:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9438:70:28"
            },
            "returnParameters": {
              "id": 17071,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9526:0:28"
            },
            "scope": 18367,
            "src": "9409:273:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17099,
              "nodeType": "Block",
              "src": "9965:50:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 17095,
                      "name": "maxStakedBalanceEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16692,
                      "src": "9976:23:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 17096,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10002:5:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "9976:31:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 17098,
                  "nodeType": "ExpressionStatement",
                  "src": "9976:31:28"
                }
              ]
            },
            "documentation": {
              "id": 17090,
              "nodeType": "StructuredDocumentation",
              "src": "9690:216:28",
              "text": " @dev disables the max staked balance mechanism\n available as a temporary mechanism during the beta\n once disabled, it cannot be re-enabled\n can only be called by the owner"
            },
            "functionSelector": "16912f96",
            "id": 17100,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17093,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17092,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "9955:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9955:9:28"
              }
            ],
            "name": "disableMaxStakedBalances",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17091,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9945:2:28"
            },
            "returnParameters": {
              "id": 17094,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9965:0:28"
            },
            "scope": 18367,
            "src": "9912:103:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17112,
              "nodeType": "Block",
              "src": "10303:61:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17108,
                      "name": "reservesToPoolTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16677,
                      "src": "10321:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
                        "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
                      }
                    },
                    "id": 17110,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17109,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17103,
                      "src": "10342:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10321:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "functionReturnParameters": 17107,
                  "id": 17111,
                  "nodeType": "Return",
                  "src": "10314:42:28"
                }
              ]
            },
            "documentation": {
              "id": 17101,
              "nodeType": "StructuredDocumentation",
              "src": "10023:194:28",
              "text": " @dev returns the pool token address by the reserve token address\n @param _reserveToken    reserve token address\n @return pool token address"
            },
            "functionSelector": "5768adcf",
            "id": 17113,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "poolToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17103,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17113,
                  "src": "10242:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17102,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "10242:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10241:27:28"
            },
            "returnParameters": {
              "id": 17107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17106,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17113,
                  "src": "10290:11:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17105,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "10290:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10289:13:28"
            },
            "scope": 18367,
            "src": "10223:141:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17153,
              "nodeType": "Block",
              "src": "10666:530:28",
              "statements": [
                {
                  "assignments": [
                    17122
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17122,
                      "mutability": "mutable",
                      "name": "poolTokenSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17153,
                      "src": "10715:23:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17121,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10715:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17126,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17123,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17116,
                        "src": "10741:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "id": 17124,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21415,
                      "src": "10741:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 17125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10741:24:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10715:50:28"
                },
                {
                  "assignments": [
                    17128
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17128,
                      "mutability": "mutable",
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17153,
                      "src": "10876:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17127,
                        "name": "IERC20Token",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21461,
                        "src": "10876:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17132,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17129,
                      "name": "poolTokensToReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16681,
                      "src": "10903:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                        "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
                      }
                    },
                    "id": 17131,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17130,
                      "name": "_poolToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17116,
                      "src": "10924:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ISmartToken_$21516",
                        "typeString": "contract ISmartToken"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10903:32:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10876:59:28"
                },
                {
                  "assignments": [
                    17134
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17134,
                      "mutability": "mutable",
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17153,
                      "src": "10946:15:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17133,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10946:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17138,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17136,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17128,
                        "src": "10979:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17135,
                      "name": "reserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9699,
                      "src": "10964:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 17137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10964:28:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10946:46:28"
                },
                {
                  "assignments": [
                    17140
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17140,
                      "mutability": "mutable",
                      "name": "stakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17153,
                      "src": "11003:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17139,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11003:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17144,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17141,
                      "name": "stakedBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16673,
                      "src": "11027:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20Token => uint256)"
                      }
                    },
                    "id": 17143,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17142,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17128,
                      "src": "11042:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11027:28:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11003:52:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17150,
                        "name": "stakedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17140,
                        "src": "11174:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17147,
                            "name": "poolTokenSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17122,
                            "src": "11153:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 17145,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17134,
                            "src": "11141:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 17146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22661,
                          "src": "11141:11:28",
                          "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": 17148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11141:28:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 17149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22687,
                      "src": "11141:32:28",
                      "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": 17151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11141:47:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17120,
                  "id": 17152,
                  "nodeType": "Return",
                  "src": "11134:54:28"
                }
              ]
            },
            "documentation": {
              "id": 17114,
              "nodeType": "StructuredDocumentation",
              "src": "10372:208:28",
              "text": " @dev returns the maximum number of pool tokens that can currently be liquidated\n @param _poolToken   address of the pool token\n @return liquidation limit"
            },
            "functionSelector": "2bf0c985",
            "id": 17154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "liquidationLimit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17117,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17116,
                  "mutability": "mutable",
                  "name": "_poolToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17154,
                  "src": "10612:22:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17115,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "10612:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10611:24:28"
            },
            "returnParameters": {
              "id": 17120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17119,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17154,
                  "src": "10657:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17118,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10657:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10656:9:28"
            },
            "scope": 18367,
            "src": "10586:610:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9664
            ],
            "body": {
              "id": 17180,
              "nodeType": "Block",
              "src": "11613:190:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 17169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 17166,
                            "name": "reserveTokenCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "11698:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
                              "typeString": "function () view returns (uint16)"
                            }
                          },
                          "id": 17167,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11698:19:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "32",
                          "id": 17168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11720:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "src": "11698:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f524553455256455f434f554e54",
                        "id": 17170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11723:27:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        },
                        "value": "ERR_INVALID_RESERVE_COUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        }
                      ],
                      "id": 17165,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11690:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11690:61:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17172,
                  "nodeType": "ExpressionStatement",
                  "src": "11690:61:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17176,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17157,
                        "src": "11779:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17177,
                        "name": "_weight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17159,
                        "src": "11787:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17173,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "11762:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_LiquidityPoolV2Converter_$18367",
                          "typeString": "contract super LiquidityPoolV2Converter"
                        }
                      },
                      "id": 17175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addReserve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9664,
                      "src": "11762:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_uint32_$returns$__$",
                        "typeString": "function (contract IERC20Token,uint32)"
                      }
                    },
                    "id": 17178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11762:33:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17179,
                  "nodeType": "ExpressionStatement",
                  "src": "11762:33:28"
                }
              ]
            },
            "documentation": {
              "id": 17155,
              "nodeType": "StructuredDocumentation",
              "src": "11204:321:28",
              "text": " @dev defines a new reserve token for the converter\n can only be called by the owner while the converter is inactive and\n 2 reserves aren't defined yet\n @param _token   address of the reserve token\n @param _weight  reserve weight, represented in ppm, 1-1000000"
            },
            "functionSelector": "6a49d2c4",
            "id": 17181,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17163,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17162,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22088,
                  "src": "11603:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11603:9:28"
              }
            ],
            "name": "addReserve",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 17161,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11594:8:28"
            },
            "parameters": {
              "id": 17160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17157,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17181,
                  "src": "11551:18:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17156,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "11551:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17159,
                  "mutability": "mutable",
                  "name": "_weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17181,
                  "src": "11571:14:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 17158,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11571:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11550:36:28"
            },
            "returnParameters": {
              "id": 17164,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11613:0:28"
            },
            "scope": 18367,
            "src": "11531:272:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17200,
              "nodeType": "Block",
              "src": "12135:98:28",
              "statements": [
                {
                  "assignments": [
                    17190
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17190,
                      "mutability": "mutable",
                      "name": "rate",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17200,
                      "src": "12146:20:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                        "typeString": "struct Fraction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17189,
                        "name": "Fraction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22916,
                        "src": "12146:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                          "typeString": "struct Fraction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17193,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17191,
                      "name": "_effectiveTokensRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18186,
                      "src": "12169:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Fraction_$22916_memory_ptr_$",
                        "typeString": "function () view returns (struct Fraction memory)"
                      }
                    },
                    "id": 17192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12169:22:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                      "typeString": "struct Fraction memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12146:45:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17194,
                          "name": "rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17190,
                          "src": "12210:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                            "typeString": "struct Fraction memory"
                          }
                        },
                        "id": 17195,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "n",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22913,
                        "src": "12210:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17196,
                          "name": "rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17190,
                          "src": "12218:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                            "typeString": "struct Fraction memory"
                          }
                        },
                        "id": 17197,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "d",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22915,
                        "src": "12218:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17198,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "12209:16:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17188,
                  "id": 17199,
                  "nodeType": "Return",
                  "src": "12202:23:28"
                }
              ]
            },
            "documentation": {
              "id": 17182,
              "nodeType": "StructuredDocumentation",
              "src": "11811:248:28",
              "text": " @dev returns the effective rate of 1 primary token in secondary tokens\n @return rate of 1 primary token in secondary tokens (numerator)\n @return rate of 1 primary token in secondary tokens (denominator)"
            },
            "functionSelector": "db2830a4",
            "id": 17201,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "effectiveTokensRate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17183,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12093:2:28"
            },
            "returnParameters": {
              "id": 17188,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17185,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17201,
                  "src": "12117:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17184,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12117:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17187,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17201,
                  "src": "12126:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17186,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12126:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12116:18:28"
            },
            "scope": 18367,
            "src": "12065:168:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17237,
              "nodeType": "Block",
              "src": "12466:370:28",
              "statements": [
                {
                  "assignments": [
                    17210
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17210,
                      "mutability": "mutable",
                      "name": "rate",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17237,
                      "src": "12477:20:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                        "typeString": "struct Fraction"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17209,
                        "name": "Fraction",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22916,
                        "src": "12477:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                          "typeString": "struct Fraction"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17213,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17211,
                      "name": "_effectiveTokensRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18186,
                      "src": "12500:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Fraction_$22916_memory_ptr_$",
                        "typeString": "function () view returns (struct Fraction memory)"
                      }
                    },
                    "id": 17212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12500:22:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                      "typeString": "struct Fraction memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12477:45:28"
                },
                {
                  "assignments": [
                    17215,
                    17217
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17215,
                      "mutability": "mutable",
                      "name": "primaryReserveWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17237,
                      "src": "12534:27:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17214,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12534:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 17217,
                      "mutability": "mutable",
                      "name": "secondaryReserveWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17237,
                      "src": "12563:29:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17216,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12563:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17221,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17219,
                        "name": "rate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17210,
                        "src": "12620:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                          "typeString": "struct Fraction memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                          "typeString": "struct Fraction memory"
                        }
                      ],
                      "id": 17218,
                      "name": "effectiveReserveWeights",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        17238,
                        18276
                      ],
                      "referencedDeclaration": 18276,
                      "src": "12596:23:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Fraction_$22916_memory_ptr_$returns$_t_uint32_$_t_uint32_$",
                        "typeString": "function (struct Fraction memory) view returns (uint32,uint32)"
                      }
                    },
                    "id": 17220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12596:29:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                      "typeString": "tuple(uint32,uint32)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12533:92:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17222,
                      "name": "primaryReserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16667,
                      "src": "12642:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17223,
                        "name": "reserveTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9036,
                        "src": "12665:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                          "typeString": "contract IERC20Token[] storage ref"
                        }
                      },
                      "id": 17225,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12679:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "12665:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "12642:39:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17232,
                  "nodeType": "IfStatement",
                  "src": "12638:125:28",
                  "trueBody": {
                    "id": 17231,
                    "nodeType": "Block",
                    "src": "12683:80:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 17227,
                              "name": "primaryReserveWeight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17215,
                              "src": "12706:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 17228,
                              "name": "secondaryReserveWeight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17217,
                              "src": "12728:22:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "id": 17229,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "12705:46:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                            "typeString": "tuple(uint32,uint32)"
                          }
                        },
                        "functionReturnParameters": 17208,
                        "id": 17230,
                        "nodeType": "Return",
                        "src": "12698:53:28"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 17233,
                        "name": "secondaryReserveWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17217,
                        "src": "12783:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17234,
                        "name": "primaryReserveWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17215,
                        "src": "12807:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "id": 17235,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "12782:46:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                      "typeString": "tuple(uint32,uint32)"
                    }
                  },
                  "functionReturnParameters": 17208,
                  "id": 17236,
                  "nodeType": "Return",
                  "src": "12775:53:28"
                }
              ]
            },
            "documentation": {
              "id": 17202,
              "nodeType": "StructuredDocumentation",
              "src": "12241:145:28",
              "text": " @dev returns the effective reserve tokens weights\n @return reserve1 weight\n @return reserve2 weight"
            },
            "functionSelector": "ec2240f5",
            "id": 17238,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "effectiveReserveWeights",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17203,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12424:2:28"
            },
            "returnParameters": {
              "id": 17208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17205,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17238,
                  "src": "12448:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17204,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12448:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17207,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17238,
                  "src": "12457:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17206,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12457:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12447:18:28"
            },
            "scope": 18367,
            "src": "12392:444:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9256
            ],
            "body": {
              "id": 17345,
              "nodeType": "Block",
              "src": "13545:1311:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        "id": 17264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 17262,
                          "name": "_sourceToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17241,
                          "src": "13591:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 17263,
                          "name": "_targetToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17243,
                          "src": "13607:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "src": "13591:28:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f53414d455f534f555243455f544152474554",
                        "id": 17265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13621:24:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
                          "typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
                        },
                        "value": "ERR_SAME_SOURCE_TARGET"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
                          "typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
                        }
                      ],
                      "id": 17261,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13583:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13583:63:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17267,
                  "nodeType": "ExpressionStatement",
                  "src": "13583:63:28"
                },
                {
                  "assignments": [
                    17269
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17269,
                      "mutability": "mutable",
                      "name": "sourceTokenWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17345,
                      "src": "13659:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17268,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13659:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17270,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13659:24:28"
                },
                {
                  "assignments": [
                    17272
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17272,
                      "mutability": "mutable",
                      "name": "targetTokenWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17345,
                      "src": "13694:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17271,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13694:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17273,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13694:24:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 17277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17274,
                      "name": "externalRateUpdateTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16685,
                      "src": "13850:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 17275,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18366,
                        "src": "13876:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 17276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13876:6:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13850:32:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 17327,
                    "nodeType": "Block",
                    "src": "14044:527:28",
                    "statements": [
                      {
                        "assignments": [
                          17293
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17293,
                            "mutability": "mutable",
                            "name": "rate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 17327,
                            "src": "14059:20:28",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                              "typeString": "struct Fraction"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 17292,
                              "name": "Fraction",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 22916,
                              "src": "14059:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                                "typeString": "struct Fraction"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17296,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 17294,
                            "name": "_effectiveTokensRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18186,
                            "src": "14082:20:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Fraction_$22916_memory_ptr_$",
                              "typeString": "function () view returns (struct Fraction memory)"
                            }
                          },
                          "id": 17295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14082:22:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                            "typeString": "struct Fraction memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14059:45:28"
                      },
                      {
                        "assignments": [
                          17298,
                          17300
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17298,
                            "mutability": "mutable",
                            "name": "primaryReserveWeight",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 17327,
                            "src": "14120:27:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 17297,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "14120:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 17300,
                            "mutability": "mutable",
                            "name": "secondaryReserveWeight",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 17327,
                            "src": "14149:29:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "typeName": {
                              "id": 17299,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "14149:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17304,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17302,
                              "name": "rate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17293,
                              "src": "14206:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                                "typeString": "struct Fraction memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                                "typeString": "struct Fraction memory"
                              }
                            ],
                            "id": 17301,
                            "name": "effectiveReserveWeights",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              17238,
                              18276
                            ],
                            "referencedDeclaration": 18276,
                            "src": "14182:23:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Fraction_$22916_memory_ptr_$returns$_t_uint32_$_t_uint32_$",
                              "typeString": "function (struct Fraction memory) view returns (uint32,uint32)"
                            }
                          },
                          "id": 17303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14182:29:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                            "typeString": "tuple(uint32,uint32)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14119:92:28"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          "id": 17307,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 17305,
                            "name": "_sourceToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17241,
                            "src": "14232:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 17306,
                            "name": "primaryReserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16667,
                            "src": "14248:19:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "src": "14232:35:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 17325,
                          "nodeType": "Block",
                          "src": "14424:136:28",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 17319,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 17317,
                                  "name": "sourceTokenWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17269,
                                  "src": "14443:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 17318,
                                  "name": "secondaryReserveWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17300,
                                  "src": "14463:22:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "14443:42:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 17320,
                              "nodeType": "ExpressionStatement",
                              "src": "14443:42:28"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 17323,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 17321,
                                  "name": "targetTokenWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17272,
                                  "src": "14504:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 17322,
                                  "name": "primaryReserveWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17298,
                                  "src": "14524:20:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "14504:40:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 17324,
                              "nodeType": "ExpressionStatement",
                              "src": "14504:40:28"
                            }
                          ]
                        },
                        "id": 17326,
                        "nodeType": "IfStatement",
                        "src": "14228:332:28",
                        "trueBody": {
                          "id": 17316,
                          "nodeType": "Block",
                          "src": "14269:136:28",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 17310,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 17308,
                                  "name": "sourceTokenWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17269,
                                  "src": "14288:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 17309,
                                  "name": "primaryReserveWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17298,
                                  "src": "14308:20:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "14288:40:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 17311,
                              "nodeType": "ExpressionStatement",
                              "src": "14288:40:28"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 17314,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 17312,
                                  "name": "targetTokenWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17272,
                                  "src": "14347:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 17313,
                                  "name": "secondaryReserveWeight",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17300,
                                  "src": "14367:22:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "src": "14347:42:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 17315,
                              "nodeType": "ExpressionStatement",
                              "src": "14347:42:28"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 17328,
                  "nodeType": "IfStatement",
                  "src": "13846:725:28",
                  "trueBody": {
                    "id": 17291,
                    "nodeType": "Block",
                    "src": "13884:145:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17278,
                            "name": "sourceTokenWeight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17269,
                            "src": "13899:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 17279,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9040,
                                "src": "13919:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                  "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                }
                              },
                              "id": 17281,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 17280,
                                "name": "_sourceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17241,
                                "src": "13928:12:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                  "typeString": "contract IERC20Token"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13919:22:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                "typeString": "struct ConverterBase.Reserve storage ref"
                              }
                            },
                            "id": 17282,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "weight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9016,
                            "src": "13919:29:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "13899:49:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 17284,
                        "nodeType": "ExpressionStatement",
                        "src": "13899:49:28"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17285,
                            "name": "targetTokenWeight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17272,
                            "src": "13963:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "id": 17288,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 17286,
                              "name": "PPM_RESOLUTION",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9007,
                              "src": "13983:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 17287,
                              "name": "sourceTokenWeight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17269,
                              "src": "14000:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "src": "13983:34:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "13963:54:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 17290,
                        "nodeType": "ExpressionStatement",
                        "src": "13963:54:28"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    17330,
                    null,
                    17332
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17330,
                      "mutability": "mutable",
                      "name": "targetAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17345,
                      "src": "14678:20:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17329,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14678:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null,
                    {
                      "constant": false,
                      "id": 17332,
                      "mutability": "mutable",
                      "name": "fee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17345,
                      "src": "14702:11:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17331,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14702:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17340,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17334,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17241,
                        "src": "14737:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17335,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17243,
                        "src": "14751:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17336,
                        "name": "sourceTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17269,
                        "src": "14765:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17337,
                        "name": "targetTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17272,
                        "src": "14784:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17338,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17245,
                        "src": "14803:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17333,
                      "name": "targetAmountAndFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18083,
                      "src": "14717:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint32_$_t_uint32_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint32,uint32,uint256) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 17339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14717:94:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14677:134:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 17341,
                        "name": "targetAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17330,
                        "src": "14830:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17342,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17332,
                        "src": "14844:3:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17343,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "14829:19:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17260,
                  "id": 17344,
                  "nodeType": "Return",
                  "src": "14822:26:28"
                }
              ]
            },
            "documentation": {
              "id": 17239,
              "nodeType": "StructuredDocumentation",
              "src": "12844:421:28",
              "text": " @dev returns the expected target amount of converting one reserve to another along with the fee\n @param _sourceToken contract address of the source reserve token\n @param _targetToken contract address of the target reserve token\n @param _amount      amount of tokens received from the user\n @return expected target amount\n @return expected fee"
            },
            "functionSelector": "af94b8d8",
            "id": 17346,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17249,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17248,
                  "name": "active",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9134,
                  "src": "13425:6:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13425:6:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17251,
                    "name": "_sourceToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17241,
                    "src": "13454:12:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17252,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17250,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "13441:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13441:26:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17254,
                    "name": "_targetToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17243,
                    "src": "13490:12:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17255,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17253,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "13477:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13477:26:28"
              }
            ],
            "name": "targetAmountAndFee",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 17247,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13407:8:28"
            },
            "parameters": {
              "id": 17246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17241,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17346,
                  "src": "13299:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17240,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "13299:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17243,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17346,
                  "src": "13325:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17242,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "13325:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17245,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17346,
                  "src": "13351:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13351:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13298:69:28"
            },
            "returnParameters": {
              "id": 17260,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17257,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17346,
                  "src": "13522:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17256,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13522:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17259,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17346,
                  "src": "13531:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17258,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13531:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13521:18:28"
            },
            "scope": 18367,
            "src": "13271:1585:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9789
            ],
            "body": {
              "id": 17536,
              "nodeType": "Block",
              "src": "15730:2450:28",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 17374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17371,
                      "name": "externalRateUpdateTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16685,
                      "src": "15806:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 17372,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18366,
                        "src": "15831:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 17373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15831:6:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15806:31:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17389,
                  "nodeType": "IfStatement",
                  "src": "15802:173:28",
                  "trueBody": {
                    "id": 17388,
                    "nodeType": "Block",
                    "src": "15839:136:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17375,
                            "name": "externalRateUpdateTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16685,
                            "src": "15854:22:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 17376,
                              "name": "time",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18366,
                              "src": "15879:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 17377,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15879:6:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15854:31:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17379,
                        "nodeType": "ExpressionStatement",
                        "src": "15854:31:28"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17380,
                            "name": "externalRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16683,
                            "src": "15900:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                              "typeString": "struct Fraction storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 17381,
                              "name": "_effectiveTokensRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18186,
                              "src": "15915:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_Fraction_$22916_memory_ptr_$",
                                "typeString": "function () view returns (struct Fraction memory)"
                              }
                            },
                            "id": 17382,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15915:22:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                              "typeString": "struct Fraction memory"
                            }
                          },
                          "src": "15900:37:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                            "typeString": "struct Fraction storage ref"
                          }
                        },
                        "id": 17384,
                        "nodeType": "ExpressionStatement",
                        "src": "15900:37:28"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 17385,
                            "name": "rebalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18205,
                            "src": "15952:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 17386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15952:11:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 17387,
                        "nodeType": "ExpressionStatement",
                        "src": "15952:11:28"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    17391
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17391,
                      "mutability": "mutable",
                      "name": "sourceTokenWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "15987:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17390,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "15987:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17396,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17392,
                        "name": "reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9040,
                        "src": "16014:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                          "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                        }
                      },
                      "id": 17394,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17393,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17349,
                        "src": "16023:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16014:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                        "typeString": "struct ConverterBase.Reserve storage ref"
                      }
                    },
                    "id": 17395,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "weight",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9016,
                    "src": "16014:29:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15987:56:28"
                },
                {
                  "assignments": [
                    17398
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17398,
                      "mutability": "mutable",
                      "name": "targetTokenWeight",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "16054:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 17397,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "16054:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17402,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 17401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17399,
                      "name": "PPM_RESOLUTION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9007,
                      "src": "16081:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17400,
                      "name": "sourceTokenWeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17391,
                      "src": "16098:17:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "16081:34:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16054:61:28"
                },
                {
                  "assignments": [
                    17404,
                    17406,
                    17408
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17404,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "16177:14:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17403,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16177:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 17406,
                      "mutability": "mutable",
                      "name": "standardFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "16193:19:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17405,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16193:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 17408,
                      "mutability": "mutable",
                      "name": "totalFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "16214:16:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17407,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16214:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17416,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17410,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17349,
                        "src": "16254:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17411,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17351,
                        "src": "16268:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17412,
                        "name": "sourceTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17391,
                        "src": "16282:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17413,
                        "name": "targetTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17398,
                        "src": "16301:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17414,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17353,
                        "src": "16320:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17409,
                      "name": "targetAmountAndFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18083,
                      "src": "16234:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint32_$_t_uint32_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint32,uint32,uint256) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 17415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16234:94:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16176:152:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 17420,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 17418,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17404,
                          "src": "16409:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 17419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16419:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "16409:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f5a45524f5f5441524745545f414d4f554e54",
                        "id": 17421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16422:24:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_29cb0846c2d5a859f661a5b4c4a8be47a80ca27c24af6f007bda101871b53e03",
                          "typeString": "literal_string \"ERR_ZERO_TARGET_AMOUNT\""
                        },
                        "value": "ERR_ZERO_TARGET_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_29cb0846c2d5a859f661a5b4c4a8be47a80ca27c24af6f007bda101871b53e03",
                          "typeString": "literal_string \"ERR_ZERO_TARGET_AMOUNT\""
                        }
                      ],
                      "id": 17417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "16401:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16401:46:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17423,
                  "nodeType": "ExpressionStatement",
                  "src": "16401:46:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17424,
                      "name": "_sourceToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17349,
                      "src": "16527:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17425,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "16543:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "16527:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 17454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 17439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 17436,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "16670:3:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 17437,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "16670:9:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 17438,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16683:1:28",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "16670:14:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 17453,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 17449,
                                      "name": "_sourceToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17349,
                                      "src": "16745:12:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                        "typeString": "contract IERC20Token"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                        "typeString": "contract IERC20Token"
                                      }
                                    ],
                                    "id": 17448,
                                    "name": "reserveBalance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9699,
                                    "src": "16730:14:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                                      "typeString": "function (contract IERC20Token) view returns (uint256)"
                                    }
                                  },
                                  "id": 17450,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16730:28:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 17444,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "16719:4:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                            "typeString": "contract LiquidityPoolV2Converter"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                            "typeString": "contract LiquidityPoolV2Converter"
                                          }
                                        ],
                                        "id": 17443,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "16711:7:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 17442,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "16711:7:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      },
                                      "id": 17445,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "16711:13:28",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 17440,
                                      "name": "_sourceToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17349,
                                      "src": "16688:12:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                        "typeString": "contract IERC20Token"
                                      }
                                    },
                                    "id": 17441,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "balanceOf",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 21422,
                                    "src": "16688:22:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) view external returns (uint256)"
                                    }
                                  },
                                  "id": 17446,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16688:37:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 17447,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22627,
                                "src": "16688:41:28",
                                "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": 17451,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16688:71:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 17452,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17353,
                              "src": "16763:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "16688:82:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "16670:100:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4552525f494e56414c49445f414d4f554e54",
                          "id": 17455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16772:20:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c44007bfe4e704be0ed1393660a827b4f88825f4b6fe1bc10cd38fc3fcb7d839",
                            "typeString": "literal_string \"ERR_INVALID_AMOUNT\""
                          },
                          "value": "ERR_INVALID_AMOUNT"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_c44007bfe4e704be0ed1393660a827b4f88825f4b6fe1bc10cd38fc3fcb7d839",
                            "typeString": "literal_string \"ERR_INVALID_AMOUNT\""
                          }
                        ],
                        "id": 17435,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          -18,
                          -18
                        ],
                        "referencedDeclaration": -18,
                        "src": "16662:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 17456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16662:131:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17457,
                    "nodeType": "ExpressionStatement",
                    "src": "16662:131:28"
                  },
                  "id": 17458,
                  "nodeType": "IfStatement",
                  "src": "16523:270:28",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 17431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 17428,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "16585:3:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 17429,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "16585:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 17430,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17353,
                            "src": "16598:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16585:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4552525f4554485f414d4f554e545f4d49534d41544348",
                          "id": 17432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16607:25:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_b27c160ac497b67c4fef6b5554e0b1a41f3c9b44e4bd8482662df760b76c093b",
                            "typeString": "literal_string \"ERR_ETH_AMOUNT_MISMATCH\""
                          },
                          "value": "ERR_ETH_AMOUNT_MISMATCH"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_b27c160ac497b67c4fef6b5554e0b1a41f3c9b44e4bd8482662df760b76c093b",
                            "typeString": "literal_string \"ERR_ETH_AMOUNT_MISMATCH\""
                          }
                        ],
                        "id": 17427,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          -18,
                          -18
                        ],
                        "referencedDeclaration": -18,
                        "src": "16577:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 17433,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16577:56:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17434,
                    "nodeType": "ExpressionStatement",
                    "src": "16577:56:28"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17460,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17349,
                        "src": "16863:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17459,
                      "name": "syncReserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9844,
                      "src": "16844:18:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$returns$__$",
                        "typeString": "function (contract IERC20Token)"
                      }
                    },
                    "id": 17461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16844:32:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17462,
                  "nodeType": "ExpressionStatement",
                  "src": "16844:32:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17463,
                          "name": "reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9040,
                          "src": "16887:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                            "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                          }
                        },
                        "id": 17465,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17464,
                          "name": "_targetToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17351,
                          "src": "16896:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16887:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                          "typeString": "struct ConverterBase.Reserve storage ref"
                        }
                      },
                      "id": 17466,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9014,
                      "src": "16887:30:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17471,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17404,
                          "src": "16953:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17468,
                              "name": "_targetToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17351,
                              "src": "16935:12:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            ],
                            "id": 17467,
                            "name": "reserveBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9699,
                            "src": "16920:14:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                              "typeString": "function (contract IERC20Token) view returns (uint256)"
                            }
                          },
                          "id": 17469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16920:28:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17470,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22627,
                        "src": "16920:32:28",
                        "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": 17472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16920:40:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16887:73:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17474,
                  "nodeType": "ExpressionStatement",
                  "src": "16887:73:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17475,
                        "name": "stakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16673,
                        "src": "17031:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17477,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17476,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17351,
                        "src": "17046:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17031:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17482,
                          "name": "standardFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17406,
                          "src": "17095:11:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 17478,
                            "name": "stakedBalances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16673,
                            "src": "17062:14:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                              "typeString": "mapping(contract IERC20Token => uint256)"
                            }
                          },
                          "id": 17480,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17479,
                            "name": "_targetToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17351,
                            "src": "17077:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "17062:28:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22605,
                        "src": "17062:32:28",
                        "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": 17483,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17062:45:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17031:76:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17485,
                  "nodeType": "ExpressionStatement",
                  "src": "17031:76:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17486,
                      "name": "_targetToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17351,
                      "src": "17194:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17487,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "17210:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "17194:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 17502,
                    "nodeType": "Block",
                    "src": "17302:75:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17497,
                              "name": "_targetToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17351,
                              "src": "17330:12:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 17498,
                              "name": "_beneficiary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17357,
                              "src": "17344:12:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 17499,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17404,
                              "src": "17358:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 17496,
                            "name": "safeTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22809,
                            "src": "17317:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (contract IERC20Token,address,uint256)"
                            }
                          },
                          "id": 17500,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17317:48:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 17501,
                        "nodeType": "ExpressionStatement",
                        "src": "17317:48:28"
                      }
                    ]
                  },
                  "id": 17503,
                  "nodeType": "IfStatement",
                  "src": "17190:187:28",
                  "trueBody": {
                    "id": 17495,
                    "nodeType": "Block",
                    "src": "17231:56:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17492,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17404,
                              "src": "17268:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 17489,
                              "name": "_beneficiary",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17357,
                              "src": "17246:12:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 17491,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17246:21:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 17493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17246:29:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 17494,
                        "nodeType": "ExpressionStatement",
                        "src": "17246:29:28"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17505,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17349,
                        "src": "17455:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17506,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17351,
                        "src": "17469:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17507,
                        "name": "_trader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17355,
                        "src": "17483:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17508,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17353,
                        "src": "17492:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17509,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17404,
                        "src": "17501:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17510,
                        "name": "totalFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17408,
                        "src": "17509:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17504,
                      "name": "dispatchConversionEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9908,
                      "src": "17431:23:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 17511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17431:87:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17512,
                  "nodeType": "ExpressionStatement",
                  "src": "17431:87:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17514,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17349,
                        "src": "17619:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17515,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17351,
                        "src": "17633:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17516,
                        "name": "sourceTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17391,
                        "src": "17647:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17517,
                        "name": "targetTokenWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17398,
                        "src": "17666:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 17513,
                      "name": "dispatchTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18337,
                      "src": "17590:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint32_$_t_uint32_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint32,uint32)"
                      }
                    },
                    "id": 17518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17590:94:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17519,
                  "nodeType": "ExpressionStatement",
                  "src": "17590:94:28"
                },
                {
                  "assignments": [
                    17521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17521,
                      "mutability": "mutable",
                      "name": "targetPoolToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17536,
                      "src": "17929:27:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ISmartToken_$21516",
                        "typeString": "contract ISmartToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17520,
                        "name": "ISmartToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21516,
                        "src": "17929:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17525,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17522,
                      "name": "reservesToPoolTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16677,
                      "src": "17959:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
                        "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
                      }
                    },
                    "id": 17524,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17523,
                      "name": "_targetToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17351,
                      "src": "17980:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17959:34:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17929:64:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17527,
                        "name": "targetPoolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17521,
                        "src": "18037:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 17528,
                            "name": "targetPoolToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17521,
                            "src": "18054:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISmartToken_$21516",
                              "typeString": "contract ISmartToken"
                            }
                          },
                          "id": 17529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21415,
                          "src": "18054:27:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 17530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18054:29:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17531,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17351,
                        "src": "18085:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17526,
                      "name": "dispatchPoolTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18357,
                      "src": "18004:32:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ISmartToken_$21516_$_t_uint256_$_t_contract$_IERC20Token_$21461_$returns$__$",
                        "typeString": "function (contract ISmartToken,uint256,contract IERC20Token)"
                      }
                    },
                    "id": 17532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18004:94:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17533,
                  "nodeType": "ExpressionStatement",
                  "src": "18004:94:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17534,
                    "name": "amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17404,
                    "src": "18166:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17370,
                  "id": 17535,
                  "nodeType": "Return",
                  "src": "18159:13:28"
                }
              ]
            },
            "documentation": {
              "id": 17347,
              "nodeType": "StructuredDocumentation",
              "src": "14864:569:28",
              "text": " @dev converts a specific amount of source tokens to target tokens\n can only be called by the bancor network contract\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _amount      amount of tokens to convert (in units of the source token)\n @param _trader      address of the caller who executed the conversion\n @param _beneficiary wallet to receive the conversion result\n @return amount of tokens received (in units of the target token)"
            },
            "id": 17537,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17361,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17360,
                  "name": "active",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9134,
                  "src": "15619:6:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15619:6:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17363,
                    "name": "_sourceToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17349,
                    "src": "15648:12:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17364,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17362,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "15635:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15635:26:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17366,
                    "name": "_targetToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17351,
                    "src": "15684:12:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17367,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17365,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "15671:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15671:26:28"
              }
            ],
            "name": "doConvert",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 17359,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15601:8:28"
            },
            "parameters": {
              "id": 17358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17349,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15458:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17348,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "15458:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17351,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15484:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17350,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "15484:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17353,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15510:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17352,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15510:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17355,
                  "mutability": "mutable",
                  "name": "_trader",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15527:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15527:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17357,
                  "mutability": "mutable",
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15544:28:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 17356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15544:15:28",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15457:116:28"
            },
            "returnParameters": {
              "id": 17370,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17369,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17537,
                  "src": "15716:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15716:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15715:9:28"
            },
            "scope": 18367,
            "src": "15439:2741:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 17762,
              "nodeType": "Block",
              "src": "18867:3062:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          "id": 17565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 17563,
                            "name": "_reserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17540,
                            "src": "18988:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 17564,
                            "name": "ETH_RESERVE_ADDRESS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9012,
                            "src": "19005:19:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "src": "18988:36:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 17573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 17570,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "19050:3:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 17571,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19050:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 17572,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19063:1:28",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19050:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 17574,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "18988:76:28",
                        "trueExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 17569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 17566,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "19027:3:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 17567,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19027:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 17568,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17542,
                            "src": "19040:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "19027:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4554485f414d4f554e545f4d49534d41544348",
                        "id": 17575,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19066:25:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b27c160ac497b67c4fef6b5554e0b1a41f3c9b44e4bd8482662df760b76c093b",
                          "typeString": "literal_string \"ERR_ETH_AMOUNT_MISMATCH\""
                        },
                        "value": "ERR_ETH_AMOUNT_MISMATCH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b27c160ac497b67c4fef6b5554e0b1a41f3c9b44e4bd8482662df760b76c093b",
                          "typeString": "literal_string \"ERR_ETH_AMOUNT_MISMATCH\""
                        }
                      ],
                      "id": 17562,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18980:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18980:112:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17577,
                  "nodeType": "ExpressionStatement",
                  "src": "18980:112:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17578,
                      "name": "syncReserveBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9871,
                      "src": "19156:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 17579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19156:21:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17580,
                  "nodeType": "ExpressionStatement",
                  "src": "19156:21:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17581,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17540,
                      "src": "19300:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17582,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "19317:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "19300:36:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17599,
                  "nodeType": "IfStatement",
                  "src": "19296:161:28",
                  "trueBody": {
                    "id": 17598,
                    "nodeType": "Block",
                    "src": "19338:119:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17596,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 17584,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9040,
                                "src": "19353:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                  "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                }
                              },
                              "id": 17586,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 17585,
                                "name": "ETH_RESERVE_ADDRESS",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9012,
                                "src": "19362:19:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                  "typeString": "contract IERC20Token"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19353:29:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                "typeString": "struct ConverterBase.Reserve storage ref"
                              }
                            },
                            "id": 17587,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9014,
                            "src": "19353:37:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 17593,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "19435:3:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 17594,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "19435:9:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 17588,
                                    "name": "reserves",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9040,
                                    "src": "19393:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                      "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                    }
                                  },
                                  "id": 17590,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 17589,
                                    "name": "ETH_RESERVE_ADDRESS",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9012,
                                    "src": "19402:19:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                      "typeString": "contract IERC20Token"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19393:29:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                    "typeString": "struct ConverterBase.Reserve storage ref"
                                  }
                                },
                                "id": 17591,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9014,
                                "src": "19393:37:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 17592,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22627,
                              "src": "19393:41:28",
                              "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": 17595,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19393:52:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "19353:92:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17597,
                        "nodeType": "ExpressionStatement",
                        "src": "19353:92:28"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    17601
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17601,
                      "mutability": "mutable",
                      "name": "initialStakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17762,
                      "src": "19546:28:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17600,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "19546:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17605,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17602,
                      "name": "stakedBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16673,
                      "src": "19577:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20Token => uint256)"
                      }
                    },
                    "id": 17604,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17603,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17540,
                      "src": "19592:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19577:29:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19546:60:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 17606,
                    "name": "maxStakedBalanceEnabled",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16692,
                    "src": "19720:23:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17626,
                  "nodeType": "IfStatement",
                  "src": "19716:209:28",
                  "trueBody": {
                    "id": 17625,
                    "nodeType": "Block",
                    "src": "19745:180:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 17621,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 17612,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 17608,
                                    "name": "maxStakedBalances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16689,
                                    "src": "19768:17:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                                      "typeString": "mapping(contract IERC20Token => uint256)"
                                    }
                                  },
                                  "id": 17610,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 17609,
                                    "name": "_reserveToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 17540,
                                    "src": "19786:13:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                      "typeString": "contract IERC20Token"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19768:32:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 17611,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "19804:1:28",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "19768:37:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 17620,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 17615,
                                      "name": "_amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17542,
                                      "src": "19834:7:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 17613,
                                      "name": "initialStakedBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 17601,
                                      "src": "19809:20:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 17614,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22605,
                                    "src": "19809:24:28",
                                    "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": 17616,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "19809:33:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 17617,
                                    "name": "maxStakedBalances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16689,
                                    "src": "19846:17:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                                      "typeString": "mapping(contract IERC20Token => uint256)"
                                    }
                                  },
                                  "id": 17619,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 17618,
                                    "name": "_reserveToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 17540,
                                    "src": "19864:13:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                      "typeString": "contract IERC20Token"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "19846:32:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "19809:69:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "19768:110:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4552525f4d41585f5354414b45445f42414c414e43455f52454143484544",
                              "id": 17622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19880:32:28",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e71abaa0836b516acb5bcc1418977bbb31101745086dfce64d3b60d38c4171f5",
                                "typeString": "literal_string \"ERR_MAX_STAKED_BALANCE_REACHED\""
                              },
                              "value": "ERR_MAX_STAKED_BALANCE_REACHED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e71abaa0836b516acb5bcc1418977bbb31101745086dfce64d3b60d38c4171f5",
                                "typeString": "literal_string \"ERR_MAX_STAKED_BALANCE_REACHED\""
                              }
                            ],
                            "id": 17607,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "19760:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 17623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19760:153:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 17624,
                        "nodeType": "ExpressionStatement",
                        "src": "19760:153:28"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    17628
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17628,
                      "mutability": "mutable",
                      "name": "reservePoolToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17762,
                      "src": "20011:28:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ISmartToken_$21516",
                        "typeString": "contract ISmartToken"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17627,
                        "name": "ISmartToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21516,
                        "src": "20011:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17632,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17629,
                      "name": "reservesToPoolTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16677,
                      "src": "20042:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
                        "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
                      }
                    },
                    "id": 17631,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17630,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17540,
                      "src": "20063:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20042:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20011:66:28"
                },
                {
                  "assignments": [
                    17634
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17634,
                      "mutability": "mutable",
                      "name": "poolTokenSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17762,
                      "src": "20088:23:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17633,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20088:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17638,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17635,
                        "name": "reservePoolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17628,
                        "src": "20114:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "id": 17636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21415,
                      "src": "20114:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 17637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20114:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20088:56:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17639,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17540,
                      "src": "20239:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17640,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "20256:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "20239:36:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 17653,
                  "nodeType": "IfStatement",
                  "src": "20235:122:28",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17643,
                          "name": "_reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17540,
                          "src": "20307:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 17644,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "20322:3:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 17645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "20322:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17648,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "20342:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                "typeString": "contract LiquidityPoolV2Converter"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_LiquidityPoolV2Converter_$18367",
                                "typeString": "contract LiquidityPoolV2Converter"
                              }
                            ],
                            "id": 17647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "20334:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17646,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "20334:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 17649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20334:13:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 17650,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17542,
                          "src": "20349:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 17642,
                        "name": "safeTransferFrom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22859,
                        "src": "20290:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (contract IERC20Token,address,address,uint256)"
                        }
                      },
                      "id": 17651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20290:67:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17652,
                    "nodeType": "ExpressionStatement",
                    "src": "20290:67:28"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17654,
                          "name": "reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9040,
                          "src": "20424:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                            "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                          }
                        },
                        "id": 17656,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17655,
                          "name": "_reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17540,
                          "src": "20433:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20424:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                          "typeString": "struct ConverterBase.Reserve storage ref"
                        }
                      },
                      "id": 17657,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9014,
                      "src": "20424:31:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17663,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17542,
                          "src": "20494:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17658,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9040,
                              "src": "20458:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                              }
                            },
                            "id": 17660,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17659,
                              "name": "_reserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17540,
                              "src": "20467:13:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20458:23:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                              "typeString": "struct ConverterBase.Reserve storage ref"
                            }
                          },
                          "id": 17661,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9014,
                          "src": "20458:31:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17662,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22605,
                        "src": "20458:35:28",
                        "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": 17664,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20458:44:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20424:78:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17666,
                  "nodeType": "ExpressionStatement",
                  "src": "20424:78:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17667,
                        "name": "stakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16673,
                        "src": "20513:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17669,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17668,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17540,
                        "src": "20528:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "20513:29:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17672,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17542,
                          "src": "20570:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 17670,
                          "name": "initialStakedBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17601,
                          "src": "20545:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17671,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22605,
                        "src": "20545:24:28",
                        "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": 17673,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20545:33:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20513:65:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17675,
                  "nodeType": "ExpressionStatement",
                  "src": "20513:65:28"
                },
                {
                  "assignments": [
                    17677
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17677,
                      "mutability": "mutable",
                      "name": "poolTokenAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17762,
                      "src": "20798:23:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17676,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20798:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17679,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 17678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "20824:1:28",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20798:27:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 17686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 17682,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 17680,
                        "name": "initialStakedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17601,
                        "src": "20840:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20864:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "20840:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 17685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 17683,
                        "name": "poolTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17634,
                        "src": "20869:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17684,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20888:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "20869:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "20840:49:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 17699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 17691,
                        "name": "poolTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17677,
                        "src": "20958:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17697,
                            "name": "initialStakedBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17601,
                            "src": "21009:20:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 17694,
                                "name": "poolTokenSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17634,
                                "src": "20988:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 17692,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17542,
                                "src": "20976:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 17693,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22661,
                              "src": "20976:11:28",
                              "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": 17695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20976:28:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 17696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22687,
                          "src": "20976:32:28",
                          "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": 17698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20976:54:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20958:72:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 17700,
                    "nodeType": "ExpressionStatement",
                    "src": "20958:72:28"
                  },
                  "id": 17701,
                  "nodeType": "IfStatement",
                  "src": "20836:194:28",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 17689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 17687,
                        "name": "poolTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17677,
                        "src": "20904:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "id": 17688,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17542,
                        "src": "20922:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20904:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 17690,
                    "nodeType": "ExpressionStatement",
                    "src": "20904:25:28"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 17705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 17703,
                          "name": "poolTokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17677,
                          "src": "21049:15:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 17704,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17544,
                          "src": "21068:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "21049:29:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f52455455524e5f544f4f5f4c4f57",
                        "id": 17706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21080:20:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c3237cc40443cfd1e0e9492ef35b7447eab6349fb6eac5eb1ec626edd3c555aa",
                          "typeString": "literal_string \"ERR_RETURN_TOO_LOW\""
                        },
                        "value": "ERR_RETURN_TOO_LOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c3237cc40443cfd1e0e9492ef35b7447eab6349fb6eac5eb1ec626edd3c555aa",
                          "typeString": "literal_string \"ERR_RETURN_TOO_LOW\""
                        }
                      ],
                      "id": 17702,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21041:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21041:60:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17708,
                  "nodeType": "ExpressionStatement",
                  "src": "21041:60:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17716,
                        "name": "reservePoolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17628,
                        "src": "21204:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17717,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "21222:3:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "21222:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17719,
                        "name": "poolTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17677,
                        "src": "21234:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 17712,
                                "name": "anchor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9030,
                                "src": "21190:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              ],
                              "id": 17711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21182:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 17710,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "21182:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 17713,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21182:15:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 17709,
                          "name": "IPoolTokensContainer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18801,
                          "src": "21161:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IPoolTokensContainer_$18801_$",
                            "typeString": "type(contract IPoolTokensContainer)"
                          }
                        },
                        "id": 17714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21161:37:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                          "typeString": "contract IPoolTokensContainer"
                        }
                      },
                      "id": 17715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18791,
                      "src": "21161:42:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ISmartToken_$21516_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract ISmartToken,address,uint256) external"
                      }
                    },
                    "id": 17720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21161:89:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17721,
                  "nodeType": "ExpressionStatement",
                  "src": "21161:89:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17722,
                      "name": "rebalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18205,
                      "src": "21312:9:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 17723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21312:11:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17724,
                  "nodeType": "ExpressionStatement",
                  "src": "21312:11:28"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17726,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "21404:3:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17727,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "21404:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17728,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17540,
                        "src": "21416:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17729,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17542,
                        "src": "21431:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17732,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17542,
                            "src": "21465:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 17730,
                            "name": "initialStakedBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17601,
                            "src": "21440:20:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 17731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22605,
                          "src": "21440:24:28",
                          "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": 17733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21440:33:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17736,
                            "name": "poolTokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17677,
                            "src": "21495:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 17734,
                            "name": "poolTokenSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17634,
                            "src": "21475:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 17735,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22605,
                          "src": "21475:19:28",
                          "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": 17737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21475:36:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17725,
                      "name": "LiquidityAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13028,
                      "src": "21389:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IERC20Token_$21461_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,contract IERC20Token,uint256,uint256,uint256)"
                      }
                    },
                    "id": 17738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21389:123:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17739,
                  "nodeType": "EmitStatement",
                  "src": "21384:128:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17741,
                        "name": "reservePoolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17628,
                        "src": "21622:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 17744,
                            "name": "poolTokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17677,
                            "src": "21660:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 17742,
                            "name": "poolTokenSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17634,
                            "src": "21640:15:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 17743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22605,
                          "src": "21640:19:28",
                          "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": 17745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21640:36:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17746,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17540,
                        "src": "21678:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17740,
                      "name": "dispatchPoolTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18357,
                      "src": "21589:32:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ISmartToken_$21516_$_t_uint256_$_t_contract$_IERC20Token_$21461_$returns$__$",
                        "typeString": "function (contract ISmartToken,uint256,contract IERC20Token)"
                      }
                    },
                    "id": 17747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21589:103:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17748,
                  "nodeType": "ExpressionStatement",
                  "src": "21589:103:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17750,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "21793:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17752,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 17751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "21807:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21793:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17753,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "21811:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17755,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 17754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "21825:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21811:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17756,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21829:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21832:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 17749,
                      "name": "dispatchTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18337,
                      "src": "21764:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint32_$_t_uint32_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint32,uint32)"
                      }
                    },
                    "id": 17758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21764:70:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17759,
                  "nodeType": "ExpressionStatement",
                  "src": "21764:70:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17760,
                    "name": "poolTokenAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17677,
                    "src": "21906:15:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17561,
                  "id": 17761,
                  "nodeType": "Return",
                  "src": "21899:22:28"
                }
              ]
            },
            "documentation": {
              "id": 17538,
              "nodeType": "StructuredDocumentation",
              "src": "18188:379:28",
              "text": " @dev increases the pool's liquidity and mints new shares in the pool to the caller\n @param _reserveToken    address of the reserve token to add liquidity to\n @param _amount          amount of liquidity to add\n @param _minReturn       minimum return-amount of pool tokens\n @return amount of pool tokens minted"
            },
            "functionSelector": "55776b77",
            "id": 17763,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17547,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17546,
                  "name": "protected",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22565,
                  "src": "18701:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18701:9:28"
              },
              {
                "arguments": null,
                "id": 17549,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17548,
                  "name": "active",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9134,
                  "src": "18720:6:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18720:6:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17551,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17540,
                    "src": "18749:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 17552,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17550,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "18736:12:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21461_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18736:27:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17554,
                    "name": "_amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17542,
                    "src": "18789:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 17555,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17553,
                  "name": "greaterThanZero",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22929,
                  "src": "18773:15:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18773:24:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17557,
                    "name": "_minReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17544,
                    "src": "18823:10:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 17558,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17556,
                  "name": "greaterThanZero",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22929,
                  "src": "18807:15:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18807:27:28"
              }
            ],
            "name": "addLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17540,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17763,
                  "src": "18595:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17539,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "18595:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17542,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17763,
                  "src": "18622:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17541,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18622:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17544,
                  "mutability": "mutable",
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17763,
                  "src": "18639:18:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18639:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18594:64:28"
            },
            "returnParameters": {
              "id": 17561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17560,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17763,
                  "src": "18853:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17559,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18853:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18852:9:28"
            },
            "scope": 18367,
            "src": "18573:3356:28",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17915,
              "nodeType": "Block",
              "src": "22563:1948:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17788,
                      "name": "syncReserveBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9871,
                      "src": "22625:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 17789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22625:21:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17790,
                  "nodeType": "ExpressionStatement",
                  "src": "22625:21:28"
                },
                {
                  "assignments": [
                    17792
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17792,
                      "mutability": "mutable",
                      "name": "initialPoolSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17915,
                      "src": "22732:25:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17791,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22732:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17796,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17793,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17766,
                        "src": "22760:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "id": 17794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21415,
                      "src": "22760:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 17795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22760:24:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22732:52:28"
                },
                {
                  "assignments": [
                    17798,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17798,
                      "mutability": "mutable",
                      "name": "reserveAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17915,
                      "src": "22874:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17797,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22874:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 17803,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17800,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17766,
                        "src": "22929:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17801,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17768,
                        "src": "22941:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17799,
                      "name": "removeLiquidityReturnAndFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18008,
                      "src": "22901:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ISmartToken_$21516_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract ISmartToken,uint256) view returns (uint256,uint256)"
                      }
                    },
                    "id": 17802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22901:48:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22873:76:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 17807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 17805,
                          "name": "reserveAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17798,
                          "src": "22968:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 17806,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17770,
                          "src": "22985:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22968:27:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f52455455524e5f544f4f5f4c4f57",
                        "id": 17808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22997:20:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c3237cc40443cfd1e0e9492ef35b7447eab6349fb6eac5eb1ec626edd3c555aa",
                          "typeString": "literal_string \"ERR_RETURN_TOO_LOW\""
                        },
                        "value": "ERR_RETURN_TOO_LOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c3237cc40443cfd1e0e9492ef35b7447eab6349fb6eac5eb1ec626edd3c555aa",
                          "typeString": "literal_string \"ERR_RETURN_TOO_LOW\""
                        }
                      ],
                      "id": 17804,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "22960:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22960:58:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17810,
                  "nodeType": "ExpressionStatement",
                  "src": "22960:58:28"
                },
                {
                  "assignments": [
                    17812
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17812,
                      "mutability": "mutable",
                      "name": "reserveToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17915,
                      "src": "23096:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17811,
                        "name": "IERC20Token",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21461,
                        "src": "23096:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17816,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17813,
                      "name": "poolTokensToReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16681,
                      "src": "23123:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                        "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
                      }
                    },
                    "id": 17815,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17814,
                      "name": "_poolToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17766,
                      "src": "23144:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ISmartToken_$21516",
                        "typeString": "contract ISmartToken"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23123:32:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23096:59:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17824,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17766,
                        "src": "23253:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17825,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "23265:3:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "23265:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17827,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17768,
                        "src": "23277:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 17820,
                                "name": "anchor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9030,
                                "src": "23239:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              ],
                              "id": 17819,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "23231:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 17818,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "23231:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 17821,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23231:15:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 17817,
                          "name": "IPoolTokensContainer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18801,
                          "src": "23210:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IPoolTokensContainer_$18801_$",
                            "typeString": "type(contract IPoolTokensContainer)"
                          }
                        },
                        "id": 17822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23210:37:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                          "typeString": "contract IPoolTokensContainer"
                        }
                      },
                      "id": 17823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18800,
                      "src": "23210:42:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ISmartToken_$21516_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract ISmartToken,address,uint256) external"
                      }
                    },
                    "id": 17828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23210:75:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17829,
                  "nodeType": "ExpressionStatement",
                  "src": "23210:75:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17830,
                          "name": "reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9040,
                          "src": "23352:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                            "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                          }
                        },
                        "id": 17832,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17831,
                          "name": "reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17812,
                          "src": "23361:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23352:22:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                          "typeString": "struct ConverterBase.Reserve storage ref"
                        }
                      },
                      "id": 17833,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9014,
                      "src": "23352:30:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17839,
                          "name": "reserveAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17798,
                          "src": "23420:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17834,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9040,
                              "src": "23385:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                              }
                            },
                            "id": 17836,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17835,
                              "name": "reserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17812,
                              "src": "23394:12:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "23385:22:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                              "typeString": "struct ConverterBase.Reserve storage ref"
                            }
                          },
                          "id": 17837,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9014,
                          "src": "23385:30:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22627,
                        "src": "23385:34:28",
                        "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": 17840,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23385:49:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23352:82:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17842,
                  "nodeType": "ExpressionStatement",
                  "src": "23352:82:28"
                },
                {
                  "assignments": [
                    17844
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17844,
                      "mutability": "mutable",
                      "name": "newStakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17915,
                      "src": "23445:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17843,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23445:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17851,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17849,
                        "name": "reserveAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17798,
                        "src": "23505:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17845,
                          "name": "stakedBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16673,
                          "src": "23472:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                            "typeString": "mapping(contract IERC20Token => uint256)"
                          }
                        },
                        "id": 17847,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17846,
                          "name": "reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17812,
                          "src": "23487:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23472:28:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 17848,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22627,
                      "src": "23472:32:28",
                      "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": 17850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23472:47:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23445:74:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17852,
                        "name": "stakedBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16673,
                        "src": "23530:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                          "typeString": "mapping(contract IERC20Token => uint256)"
                        }
                      },
                      "id": 17854,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17853,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17812,
                        "src": "23545:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "23530:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 17855,
                      "name": "newStakedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17844,
                      "src": "23561:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23530:47:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17857,
                  "nodeType": "ExpressionStatement",
                  "src": "23530:47:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 17860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17858,
                      "name": "reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17812,
                      "src": "23648:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17859,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "23664:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "23648:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17870,
                          "name": "reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17812,
                          "src": "23774:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 17871,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "23788:3:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 17872,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "23788:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 17873,
                          "name": "reserveAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17798,
                          "src": "23800:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 17869,
                        "name": "safeTransfer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22809,
                        "src": "23761:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_address_$_t_uint256_$returns$__$",
                          "typeString": "function (contract IERC20Token,address,uint256)"
                        }
                      },
                      "id": 17874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23761:53:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17875,
                    "nodeType": "ExpressionStatement",
                    "src": "23761:53:28"
                  },
                  "id": 17876,
                  "nodeType": "IfStatement",
                  "src": "23644:170:28",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 17866,
                          "name": "reserveAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17798,
                          "src": "23718:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 17861,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "23698:3:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 17864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "23698:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 17865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "23698:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                          "typeString": "function (uint256)"
                        }
                      },
                      "id": 17867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23698:34:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 17868,
                    "nodeType": "ExpressionStatement",
                    "src": "23698:34:28"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 17877,
                      "name": "rebalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18205,
                      "src": "23876:9:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 17878,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23876:11:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17879,
                  "nodeType": "ExpressionStatement",
                  "src": "23876:11:28"
                },
                {
                  "assignments": [
                    17881
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17881,
                      "mutability": "mutable",
                      "name": "newPoolTokenSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17915,
                      "src": "23900:26:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17880,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23900:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17886,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17884,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17768,
                        "src": "23951:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17882,
                        "name": "initialPoolSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17792,
                        "src": "23929:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 17883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22627,
                      "src": "23929:21:28",
                      "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": 17885,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23929:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23900:59:28"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17888,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "24044:3:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24044:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17890,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17812,
                        "src": "24056:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17891,
                        "name": "reserveAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17798,
                        "src": "24070:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17892,
                        "name": "newStakedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17844,
                        "src": "24085:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17893,
                        "name": "newPoolTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17881,
                        "src": "24103:18:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17887,
                      "name": "LiquidityRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13041,
                      "src": "24027:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IERC20Token_$21461_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,contract IERC20Token,uint256,uint256,uint256)"
                      }
                    },
                    "id": 17894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24027:95:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17895,
                  "nodeType": "EmitStatement",
                  "src": "24022:100:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17897,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17766,
                        "src": "24232:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17898,
                        "name": "newPoolTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17881,
                        "src": "24244:18:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17899,
                        "name": "reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17812,
                        "src": "24264:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 17896,
                      "name": "dispatchPoolTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18357,
                      "src": "24199:32:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ISmartToken_$21516_$_t_uint256_$_t_contract$_IERC20Token_$21461_$returns$__$",
                        "typeString": "function (contract ISmartToken,uint256,contract IERC20Token)"
                      }
                    },
                    "id": 17900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24199:78:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17901,
                  "nodeType": "ExpressionStatement",
                  "src": "24199:78:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17903,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "24378:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17905,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 17904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "24392:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "24378:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17906,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "24396:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 17908,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 17907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "24410:1:28",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "24396:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24414:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 17910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24417:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 17902,
                      "name": "dispatchTokenRateUpdateEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18337,
                      "src": "24349:28:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint32_$_t_uint32_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint32,uint32)"
                      }
                    },
                    "id": 17911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24349:70:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17912,
                  "nodeType": "ExpressionStatement",
                  "src": "24349:70:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17913,
                    "name": "reserveAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17798,
                    "src": "24490:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17787,
                  "id": 17914,
                  "nodeType": "Return",
                  "src": "24483:20:28"
                }
              ]
            },
            "documentation": {
              "id": 17764,
              "nodeType": "StructuredDocumentation",
              "src": "21937:344:28",
              "text": " @dev decreases the pool's liquidity and burns the caller's shares in the pool\n @param _poolToken   address of the pool token\n @param _amount      amount of pool tokens to burn\n @param _minReturn   minimum return-amount of reserve tokens\n @return amount of liquidity removed"
            },
            "functionSelector": "e38192e3",
            "id": 17916,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 17773,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17772,
                  "name": "protected",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22565,
                  "src": "22398:9:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22398:9:28"
              },
              {
                "arguments": null,
                "id": 17775,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17774,
                  "name": "active",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9134,
                  "src": "22417:6:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22417:6:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17777,
                    "name": "_poolToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17766,
                    "src": "22448:10:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  }
                ],
                "id": 17778,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17776,
                  "name": "validPoolToken",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16728,
                  "src": "22433:14:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ISmartToken_$21516_$",
                    "typeString": "modifier (contract ISmartToken)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22433:26:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17780,
                    "name": "_amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17768,
                    "src": "22485:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 17781,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17779,
                  "name": "greaterThanZero",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22929,
                  "src": "22469:15:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22469:24:28"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17783,
                    "name": "_minReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17770,
                    "src": "22519:10:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 17784,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17782,
                  "name": "greaterThanZero",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22929,
                  "src": "22503:15:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22503:27:28"
              }
            ],
            "name": "removeLiquidity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17766,
                  "mutability": "mutable",
                  "name": "_poolToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17916,
                  "src": "22312:22:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17765,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "22312:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17768,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17916,
                  "src": "22336:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17767,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22336:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17770,
                  "mutability": "mutable",
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17916,
                  "src": "22353:18:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17769,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22353:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22311:61:28"
            },
            "returnParameters": {
              "id": 17787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17786,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17916,
                  "src": "22549:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17785,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22549:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22548:9:28"
            },
            "scope": 18367,
            "src": "22287:2224:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18007,
              "nodeType": "Block",
              "src": "25040:683:28",
              "statements": [
                {
                  "assignments": [
                    17929
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17929,
                      "mutability": "mutable",
                      "name": "totalSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18007,
                      "src": "25051:19:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17928,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25051:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17933,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17930,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17919,
                        "src": "25073:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "id": 17931,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21415,
                      "src": "25073:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 17932,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25073:24:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25051:46:28"
                },
                {
                  "assignments": [
                    17935
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17935,
                      "mutability": "mutable",
                      "name": "stakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18007,
                      "src": "25108:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 17934,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25108:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17941,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17936,
                      "name": "stakedBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16673,
                      "src": "25132:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20Token => uint256)"
                      }
                    },
                    "id": 17940,
                    "indexExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17937,
                        "name": "poolTokensToReserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16681,
                        "src": "25147:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                          "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
                        }
                      },
                      "id": 17939,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17938,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17919,
                        "src": "25168:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "25147:32:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "25132:48:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25108:72:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 17944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17942,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17921,
                      "src": "25197:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 17943,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17929,
                      "src": "25207:11:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25197:21:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18002,
                  "nodeType": "IfStatement",
                  "src": "25193:487:28",
                  "trueBody": {
                    "id": 18001,
                    "nodeType": "Block",
                    "src": "25220:460:28",
                    "statements": [
                      {
                        "assignments": [
                          17946
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17946,
                            "mutability": "mutable",
                            "name": "x",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25235:9:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17945,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25235:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17953,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17951,
                              "name": "AMPLIFICATION_FACTOR",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16663,
                              "src": "25287:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 17947,
                                "name": "stakedBalances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16673,
                                "src": "25247:14:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                                  "typeString": "mapping(contract IERC20Token => uint256)"
                                }
                              },
                              "id": 17949,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 17948,
                                "name": "primaryReserveToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16667,
                                "src": "25262:19:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                  "typeString": "contract IERC20Token"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "25247:35:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 17950,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22661,
                            "src": "25247:39:28",
                            "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": 17952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25247:61:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25235:73:28"
                      },
                      {
                        "assignments": [
                          17955
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17955,
                            "mutability": "mutable",
                            "name": "y",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25323:9:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17954,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25323:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17959,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17957,
                              "name": "primaryReserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16667,
                              "src": "25352:19:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            ],
                            "id": 17956,
                            "name": "amplifiedBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18229,
                            "src": "25335:16:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                              "typeString": "function (contract IERC20Token) view returns (uint256)"
                            }
                          },
                          "id": 17958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25335:37:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25323:49:28"
                      },
                      {
                        "assignments": [
                          17961,
                          17963
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17961,
                            "mutability": "mutable",
                            "name": "min",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25388:11:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17960,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25388:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 17963,
                            "mutability": "mutable",
                            "name": "max",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25401:11:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17962,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25401:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17974,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 17966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 17964,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17946,
                              "src": "25416:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 17965,
                              "name": "y",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17955,
                              "src": "25420:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "25416:5:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 17970,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17955,
                                "src": "25434:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 17971,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17946,
                                "src": "25437:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 17972,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "25433:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "id": 17973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "25416:23:28",
                          "trueExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 17967,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17946,
                                "src": "25425:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 17968,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17955,
                                "src": "25428:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 17969,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "25424:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25387:52:28"
                      },
                      {
                        "assignments": [
                          17976
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17976,
                            "mutability": "mutable",
                            "name": "amountBeforeFee",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25454:23:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17975,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25454:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17984,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17982,
                              "name": "totalSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17929,
                              "src": "25511:11:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 17979,
                                  "name": "stakedBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17935,
                                  "src": "25492:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 17977,
                                  "name": "_amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17921,
                                  "src": "25480:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 17978,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22661,
                                "src": "25480:11:28",
                                "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": 17980,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25480:26:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 17981,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22687,
                            "src": "25480:30:28",
                            "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": 17983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25480:43:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25454:69:28"
                      },
                      {
                        "assignments": [
                          17986
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 17986,
                            "mutability": "mutable",
                            "name": "amountAfterFee",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18001,
                            "src": "25538:22:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 17985,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25538:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 17994,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17992,
                              "name": "max",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17963,
                              "src": "25592:3:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 17989,
                                  "name": "min",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17961,
                                  "src": "25583:3:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 17987,
                                  "name": "amountBeforeFee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17976,
                                  "src": "25563:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 17988,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22661,
                                "src": "25563:19:28",
                                "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": 17990,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25563:24:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 17991,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22687,
                            "src": "25563:28:28",
                            "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": 17993,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25563:33:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25538:58:28"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 17995,
                              "name": "amountAfterFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17986,
                              "src": "25619:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 17998,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 17996,
                                "name": "amountBeforeFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17976,
                                "src": "25635:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 17997,
                                "name": "amountAfterFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17986,
                                "src": "25653:14:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25635:32:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 17999,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "25618:50:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "functionReturnParameters": 17927,
                        "id": 18000,
                        "nodeType": "Return",
                        "src": "25611:57:28"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 18003,
                        "name": "stakedBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17935,
                        "src": "25698:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 18004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25713:1:28",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "id": 18005,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "25697:18:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_rational_0_by_1_$",
                      "typeString": "tuple(uint256,int_const 0)"
                    }
                  },
                  "functionReturnParameters": 17927,
                  "id": 18006,
                  "nodeType": "Return",
                  "src": "25690:25:28"
                }
              ]
            },
            "documentation": {
              "id": 17917,
              "nodeType": "StructuredDocumentation",
              "src": "24519:398:28",
              "text": " @dev calculates the amount of reserve tokens entitled for a given amount of pool tokens\n note that a fee is applied according to the equilibrium level of the primary reserve token\n @param _poolToken   address of the pool token\n @param _amount      amount of pool tokens\n @return amount after fee and fee, in reserve token units"
            },
            "functionSelector": "69067d95",
            "id": 18008,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "removeLiquidityReturnAndFee",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17919,
                  "mutability": "mutable",
                  "name": "_poolToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18008,
                  "src": "24960:22:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17918,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "24960:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17921,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18008,
                  "src": "24984:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17920,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24984:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24959:41:28"
            },
            "returnParameters": {
              "id": 17927,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17924,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18008,
                  "src": "25022:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17923,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25022:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17926,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18008,
                  "src": "25031:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17925,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25031:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25021:18:28"
            },
            "scope": 18367,
            "src": "24923:800:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18082,
              "nodeType": "Block",
              "src": "26726:820:28",
              "statements": [
                {
                  "assignments": [
                    18029
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18029,
                      "mutability": "mutable",
                      "name": "sourceBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18082,
                      "src": "26783:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18028,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26783:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18033,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18031,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18011,
                        "src": "26824:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18030,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "26807:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26807:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26783:54:28"
                },
                {
                  "assignments": [
                    18035
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18035,
                      "mutability": "mutable",
                      "name": "targetBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18082,
                      "src": "26848:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18034,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26848:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18039,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18037,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18013,
                        "src": "26889:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18036,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "26872:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26872:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26848:54:28"
                },
                {
                  "assignments": [
                    18041
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18041,
                      "mutability": "mutable",
                      "name": "targetAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18082,
                      "src": "26949:20:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18040,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26949:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18054,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18048,
                        "name": "sourceBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18029,
                        "src": "27053:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18049,
                        "name": "_sourceWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18015,
                        "src": "27081:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18050,
                        "name": "targetBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18035,
                        "src": "27109:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18051,
                        "name": "_targetWeight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18017,
                        "src": "27137:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18052,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18019,
                        "src": "27165:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 18044,
                                "name": "BANCOR_FORMULA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21867,
                                "src": "26997:14:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 18043,
                              "name": "addressOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22052,
                              "src": "26987:9:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) view returns (address)"
                              }
                            },
                            "id": 18045,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26987:25:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18042,
                          "name": "IBancorFormula",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13177,
                          "src": "26972:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBancorFormula_$13177_$",
                            "typeString": "type(contract IBancorFormula)"
                          }
                        },
                        "id": 18046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "26972:41:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBancorFormula_$13177",
                          "typeString": "contract IBancorFormula"
                        }
                      },
                      "id": 18047,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "crossReserveTargetAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13120,
                      "src": "26972:66:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_uint32_$_t_uint256_$_t_uint32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint32,uint256,uint32,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 18053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26972:211:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26949:234:28"
                },
                {
                  "assignments": [
                    18056
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18056,
                      "mutability": "mutable",
                      "name": "standardFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18082,
                      "src": "27196:19:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18055,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27196:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18060,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18058,
                        "name": "targetAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18041,
                        "src": "27231:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18057,
                      "name": "calculateFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9806,
                      "src": "27218:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 18059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27218:26:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27196:48:28"
                },
                {
                  "assignments": [
                    18062
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18062,
                      "mutability": "mutable",
                      "name": "totalFee",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18082,
                      "src": "27255:16:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18061,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27255:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18073,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18071,
                        "name": "standardFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18056,
                        "src": "27335:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18068,
                            "name": "PPM_RESOLUTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9007,
                            "src": "27315:14:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 18065,
                                "name": "oracleDeviationFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16695,
                                "src": "27291:18:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 18063,
                                "name": "targetAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18041,
                                "src": "27274:12:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 18064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22661,
                              "src": "27274:16:28",
                              "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": 18066,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27274:36:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "div",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22687,
                          "src": "27274:40:28",
                          "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": 18069,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27274:56:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 18070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22605,
                      "src": "27274:60:28",
                      "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": 18072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27274:73:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27255:92:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18076,
                            "name": "totalFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18062,
                            "src": "27505:8:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 18074,
                            "name": "targetAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18041,
                            "src": "27488:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22627,
                          "src": "27488:16:28",
                          "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": 18077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27488:26:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18078,
                        "name": "standardFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18056,
                        "src": "27516:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18079,
                        "name": "totalFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18062,
                        "src": "27529:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 18080,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "27487:51:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 18027,
                  "id": 18081,
                  "nodeType": "Return",
                  "src": "27480:58:28"
                }
              ]
            },
            "documentation": {
              "id": 18009,
              "nodeType": "StructuredDocumentation",
              "src": "25731:720:28",
              "text": " @dev returns the expected target amount of converting one reserve to another along with the fees\n this version of the function expects the reserve weights as an input (gas optimization)\n @param _sourceToken     contract address of the source reserve token\n @param _targetToken     contract address of the target reserve token\n @param _sourceWeight    source reserve token weight\n @param _targetWeight    target reserve token weight\n @param _amount          amount of tokens received from the user\n @return expected target amount\n @return expected standard conversion fee\n @return expected total conversion fee"
            },
            "id": 18083,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "targetAmountAndFees",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18020,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18011,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26496:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18010,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "26496:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18013,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26531:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18012,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "26531:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18015,
                  "mutability": "mutable",
                  "name": "_sourceWeight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26566:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18014,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "26566:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18017,
                  "mutability": "mutable",
                  "name": "_targetWeight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26597:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18016,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "26597:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18019,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26628:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18018,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26628:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26485:159:28"
            },
            "returnParameters": {
              "id": 18027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18022,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26694:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18021,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26694:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18024,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26703:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18023,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26703:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18026,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18083,
                  "src": "26712:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18025,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26712:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26693:27:28"
            },
            "scope": 18367,
            "src": "26457:1089:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18163,
              "nodeType": "Block",
              "src": "27831:778:28",
              "statements": [
                {
                  "assignments": [
                    18088
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18088,
                      "mutability": "mutable",
                      "name": "container",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18163,
                      "src": "27842:30:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                        "typeString": "contract IPoolTokensContainer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 18087,
                        "name": "IPoolTokensContainer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 18801,
                        "src": "27842:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                          "typeString": "contract IPoolTokensContainer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18095,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18092,
                            "name": "anchor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9030,
                            "src": "27904:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                              "typeString": "contract IConverterAnchor"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                              "typeString": "contract IConverterAnchor"
                            }
                          ],
                          "id": 18091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "27896:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 18090,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "27896:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 18093,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27896:15:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 18089,
                      "name": "IPoolTokensContainer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18801,
                      "src": "27875:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IPoolTokensContainer_$18801_$",
                        "typeString": "type(contract IPoolTokensContainer)"
                      }
                    },
                    "id": 18094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27875:37:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                      "typeString": "contract IPoolTokensContainer"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27842:70:28"
                },
                {
                  "assignments": [
                    18099
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18099,
                      "mutability": "mutable",
                      "name": "poolTokens",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18163,
                      "src": "27923:31:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ISmartToken_$21516_$dyn_memory_ptr",
                        "typeString": "contract ISmartToken[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 18097,
                          "name": "ISmartToken",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 21516,
                          "src": "27923:11:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ISmartToken_$21516",
                            "typeString": "contract ISmartToken"
                          }
                        },
                        "id": 18098,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "27923:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ISmartToken_$21516_$dyn_storage_ptr",
                          "typeString": "contract ISmartToken[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18103,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18100,
                        "name": "container",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18088,
                        "src": "27957:9:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                          "typeString": "contract IPoolTokensContainer"
                        }
                      },
                      "id": 18101,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "poolTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18777,
                      "src": "27957:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_array$_t_contract$_ISmartToken_$21516_$dyn_memory_ptr_$",
                        "typeString": "function () view external returns (contract ISmartToken[] memory)"
                      }
                    },
                    "id": 18102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27957:22:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ISmartToken_$21516_$dyn_memory_ptr",
                      "typeString": "contract ISmartToken[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27923:56:28"
                },
                {
                  "assignments": [
                    18105
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18105,
                      "mutability": "mutable",
                      "name": "initialSetup",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18163,
                      "src": "27990:17:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 18104,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "27990:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18110,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 18109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 18106,
                        "name": "poolTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18099,
                        "src": "28010:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ISmartToken_$21516_$dyn_memory_ptr",
                          "typeString": "contract ISmartToken[] memory"
                        }
                      },
                      "id": 18107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "28010:17:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28031:1:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "28010:22:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27990:42:28"
                },
                {
                  "assignments": [
                    18112
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18112,
                      "mutability": "mutable",
                      "name": "reserveCount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18163,
                      "src": "28045:20:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18111,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28045:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18115,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 18113,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9036,
                      "src": "28068:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                        "typeString": "contract IERC20Token[] storage ref"
                      }
                    },
                    "id": 18114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "28068:20:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28045:43:28"
                },
                {
                  "body": {
                    "id": 18161,
                    "nodeType": "Block",
                    "src": "28142:460:28",
                    "statements": [
                      {
                        "assignments": [
                          18127
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 18127,
                            "mutability": "mutable",
                            "name": "reservePoolToken",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 18161,
                            "src": "28157:28:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISmartToken_$21516",
                              "typeString": "contract ISmartToken"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 18126,
                              "name": "ISmartToken",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 21516,
                              "src": "28157:11:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                "typeString": "contract ISmartToken"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 18128,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "28157:28:28"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 18129,
                          "name": "initialSetup",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18105,
                          "src": "28204:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 18143,
                          "nodeType": "Block",
                          "src": "28314:67:28",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 18141,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 18137,
                                  "name": "reservePoolToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18127,
                                  "src": "28333:16:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                    "typeString": "contract ISmartToken"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 18138,
                                    "name": "poolTokens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18099,
                                    "src": "28352:10:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_contract$_ISmartToken_$21516_$dyn_memory_ptr",
                                      "typeString": "contract ISmartToken[] memory"
                                    }
                                  },
                                  "id": 18140,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 18139,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18117,
                                    "src": "28363:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "28352:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                    "typeString": "contract ISmartToken"
                                  }
                                },
                                "src": "28333:32:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                  "typeString": "contract ISmartToken"
                                }
                              },
                              "id": 18142,
                              "nodeType": "ExpressionStatement",
                              "src": "28333:32:28"
                            }
                          ]
                        },
                        "id": 18144,
                        "nodeType": "IfStatement",
                        "src": "28200:181:28",
                        "trueBody": {
                          "id": 18136,
                          "nodeType": "Block",
                          "src": "28218:77:28",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 18134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 18130,
                                  "name": "reservePoolToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18127,
                                  "src": "28237:16:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                    "typeString": "contract ISmartToken"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 18131,
                                      "name": "container",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18088,
                                      "src": "28256:9:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IPoolTokensContainer_$18801",
                                        "typeString": "contract IPoolTokensContainer"
                                      }
                                    },
                                    "id": 18132,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "createToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18782,
                                    "src": "28256:21:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_contract$_ISmartToken_$21516_$",
                                      "typeString": "function () external returns (contract ISmartToken)"
                                    }
                                  },
                                  "id": 18133,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "28256:23:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                    "typeString": "contract ISmartToken"
                                  }
                                },
                                "src": "28237:42:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                  "typeString": "contract ISmartToken"
                                }
                              },
                              "id": 18135,
                              "nodeType": "ExpressionStatement",
                              "src": "28237:42:28"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18145,
                              "name": "reservesToPoolTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16677,
                              "src": "28461:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_contract$_ISmartToken_$21516_$",
                                "typeString": "mapping(contract IERC20Token => contract ISmartToken)"
                              }
                            },
                            "id": 18149,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 18146,
                                "name": "reserveTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9036,
                                "src": "28482:13:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                                  "typeString": "contract IERC20Token[] storage ref"
                                }
                              },
                              "id": 18148,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18147,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18117,
                                "src": "28496:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "28482:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "28461:38:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISmartToken_$21516",
                              "typeString": "contract ISmartToken"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 18150,
                            "name": "reservePoolToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18127,
                            "src": "28502:16:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISmartToken_$21516",
                              "typeString": "contract ISmartToken"
                            }
                          },
                          "src": "28461:57:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ISmartToken_$21516",
                            "typeString": "contract ISmartToken"
                          }
                        },
                        "id": 18152,
                        "nodeType": "ExpressionStatement",
                        "src": "28461:57:28"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18159,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18153,
                              "name": "poolTokensToReserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16681,
                              "src": "28533:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_ISmartToken_$21516_$_t_contract$_IERC20Token_$21461_$",
                                "typeString": "mapping(contract ISmartToken => contract IERC20Token)"
                              }
                            },
                            "id": 18155,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18154,
                              "name": "reservePoolToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18127,
                              "src": "28554:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISmartToken_$21516",
                                "typeString": "contract ISmartToken"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "28533:38:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18156,
                              "name": "reserveTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9036,
                              "src": "28574:13:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21461_$dyn_storage",
                                "typeString": "contract IERC20Token[] storage ref"
                              }
                            },
                            "id": 18158,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18157,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18117,
                              "src": "28588:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "28574:16:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "src": "28533:57:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "id": 18160,
                        "nodeType": "ExpressionStatement",
                        "src": "28533:57:28"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 18122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 18120,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18117,
                      "src": "28119:1:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 18121,
                      "name": "reserveCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18112,
                      "src": "28123:12:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28119:16:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18162,
                  "initializationExpression": {
                    "assignments": [
                      18117
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 18117,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 18162,
                        "src": "28104:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 18116,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28104:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 18119,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18118,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28116:1:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "28104:13:28"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 18124,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "28137:3:28",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 18123,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18117,
                        "src": "28137:1:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 18125,
                    "nodeType": "ExpressionStatement",
                    "src": "28137:3:28"
                  },
                  "nodeType": "ForStatement",
                  "src": "28099:503:28"
                }
              ]
            },
            "documentation": {
              "id": 18084,
              "nodeType": "StructuredDocumentation",
              "src": "27554:234:28",
              "text": " @dev creates the converter's pool tokens\n note that technically pool tokens can be created on deployment but gas limit\n might get too high for a block, so creating them on first activation"
            },
            "id": 18164,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createPoolTokens",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18085,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27819:2:28"
            },
            "returnParameters": {
              "id": 18086,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27831:0:28"
            },
            "scope": 18367,
            "src": "27794:815:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18185,
              "nodeType": "Block",
              "src": "28808:192:28",
              "statements": [
                {
                  "assignments": [
                    18171,
                    18173
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18171,
                      "mutability": "mutable",
                      "name": "latestRateN",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18185,
                      "src": "28820:19:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18170,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28820:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 18173,
                      "mutability": "mutable",
                      "name": "latestRateD",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18185,
                      "src": "28841:19:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18172,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28841:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18179,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18176,
                        "name": "primaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16667,
                        "src": "28887:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18177,
                        "name": "secondaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16669,
                        "src": "28908:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 18174,
                        "name": "priceOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16665,
                        "src": "28864:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPriceOracle_$23225",
                          "typeString": "contract IPriceOracle"
                        }
                      },
                      "id": 18175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "latestRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23206,
                      "src": "28864:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token) view external returns (uint256,uint256)"
                      }
                    },
                    "id": 18178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28864:66:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28819:111:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18181,
                        "name": "latestRateN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18171,
                        "src": "28962:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18182,
                        "name": "latestRateD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18173,
                        "src": "28978:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18180,
                      "name": "Fraction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22916,
                      "src": "28948:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Fraction_$22916_storage_ptr_$",
                        "typeString": "type(struct Fraction storage pointer)"
                      }
                    },
                    "id": 18183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [
                      "n",
                      "d"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "28948:44:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                      "typeString": "struct Fraction memory"
                    }
                  },
                  "functionReturnParameters": 18169,
                  "id": 18184,
                  "nodeType": "Return",
                  "src": "28941:51:28"
                }
              ]
            },
            "documentation": {
              "id": 18165,
              "nodeType": "StructuredDocumentation",
              "src": "28617:114:28",
              "text": " @dev returns the effective rate between the two reserve tokens\n @return rate"
            },
            "id": 18186,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_effectiveTokensRate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18166,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28766:2:28"
            },
            "returnParameters": {
              "id": 18169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18168,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18186,
                  "src": "28791:15:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                    "typeString": "struct Fraction"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18167,
                    "name": "Fraction",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22916,
                    "src": "28791:8:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                      "typeString": "struct Fraction"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28790:17:28"
            },
            "scope": 18367,
            "src": "28737:263:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18204,
              "nodeType": "Block",
              "src": "29209:137:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18190,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9040,
                              "src": "29221:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                              }
                            },
                            "id": 18192,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18191,
                              "name": "primaryReserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16667,
                              "src": "29230:19:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "29221:29:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                              "typeString": "struct ConverterBase.Reserve storage ref"
                            }
                          },
                          "id": 18193,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "weight",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9016,
                          "src": "29221:36:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18194,
                              "name": "reserves",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9040,
                              "src": "29259:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                              }
                            },
                            "id": 18196,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18195,
                              "name": "secondaryReserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16669,
                              "src": "29268:21:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "29259:31:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                              "typeString": "struct ConverterBase.Reserve storage ref"
                            }
                          },
                          "id": 18197,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "weight",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9016,
                          "src": "29259:38:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "id": 18198,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "29220:78:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                        "typeString": "tuple(uint32,uint32)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 18200,
                          "name": "externalRate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16683,
                          "src": "29325:12:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                            "typeString": "struct Fraction storage ref"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Fraction_$22916_storage",
                            "typeString": "struct Fraction storage ref"
                          }
                        ],
                        "id": 18199,
                        "name": "effectiveReserveWeights",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          17238,
                          18276
                        ],
                        "referencedDeclaration": 18276,
                        "src": "29301:23:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Fraction_$22916_memory_ptr_$returns$_t_uint32_$_t_uint32_$",
                          "typeString": "function (struct Fraction memory) view returns (uint32,uint32)"
                        }
                      },
                      "id": 18201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29301:37:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                        "typeString": "tuple(uint32,uint32)"
                      }
                    },
                    "src": "29220:118:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18203,
                  "nodeType": "ExpressionStatement",
                  "src": "29220:118:28"
                }
              ]
            },
            "documentation": {
              "id": 18187,
              "nodeType": "StructuredDocumentation",
              "src": "29008:166:28",
              "text": " @dev updates the pool's reserve weights with new values in order to push the current primary\n reserve token balance to its staked balance"
            },
            "id": 18205,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rebalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18188,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29198:2:28"
            },
            "returnParameters": {
              "id": 18189,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29209:0:28"
            },
            "scope": 18367,
            "src": "29180:166:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18228,
              "nodeType": "Block",
              "src": "29700:122:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 18222,
                            "name": "reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "29782:8:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                            }
                          },
                          "id": 18224,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 18223,
                            "name": "_reserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18208,
                            "src": "29791:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21461",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "29782:23:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                            "typeString": "struct ConverterBase.Reserve storage ref"
                          }
                        },
                        "id": 18225,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9014,
                        "src": "29782:31:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 18219,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 18217,
                              "name": "AMPLIFICATION_FACTOR",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16663,
                              "src": "29752:20:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 18218,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "29775:1:28",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "29752:24:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 18213,
                              "name": "stakedBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16673,
                              "src": "29718:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                                "typeString": "mapping(contract IERC20Token => uint256)"
                              }
                            },
                            "id": 18215,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18214,
                              "name": "_reserveToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18208,
                              "src": "29733:13:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                "typeString": "contract IERC20Token"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "29718:29:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22661,
                          "src": "29718:33:28",
                          "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": 18220,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "29718:59:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 18221,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22605,
                      "src": "29718:63:28",
                      "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": 18226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29718:96:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 18212,
                  "id": 18227,
                  "nodeType": "Return",
                  "src": "29711:103:28"
                }
              ]
            },
            "documentation": {
              "id": 18206,
              "nodeType": "StructuredDocumentation",
              "src": "29354:255:28",
              "text": " @dev returns the amplified balance of a given reserve token\n this version skips the input validation (gas optimization)\n @param _reserveToken   reserve token address\n @return amplified balance"
            },
            "id": 18229,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "amplifiedBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18209,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18208,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18229,
                  "src": "29641:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18207,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "29641:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29640:27:28"
            },
            "returnParameters": {
              "id": 18212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18211,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18229,
                  "src": "29691:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18210,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29691:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29690:9:28"
            },
            "scope": 18367,
            "src": "29615:207:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18275,
              "nodeType": "Block",
              "src": "30220:609:28",
              "statements": [
                {
                  "assignments": [
                    18240
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18240,
                      "mutability": "mutable",
                      "name": "primaryStakedBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18275,
                      "src": "30282:28:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18239,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30282:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18244,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 18241,
                      "name": "stakedBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16673,
                      "src": "30313:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                        "typeString": "mapping(contract IERC20Token => uint256)"
                      }
                    },
                    "id": 18243,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 18242,
                      "name": "primaryReserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16667,
                      "src": "30328:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21461",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "30313:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30282:66:28"
                },
                {
                  "assignments": [
                    18246
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18246,
                      "mutability": "mutable",
                      "name": "primaryBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18275,
                      "src": "30407:22:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18245,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30407:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18250,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18248,
                        "name": "primaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16667,
                        "src": "30449:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18247,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "30432:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30432:37:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30407:62:28"
                },
                {
                  "assignments": [
                    18252
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18252,
                      "mutability": "mutable",
                      "name": "secondaryBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18275,
                      "src": "30480:24:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18251,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "30480:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18256,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18254,
                        "name": "secondaryReserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16669,
                        "src": "30524:21:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18253,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "30507:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30507:39:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "30480:66:28"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18265,
                            "name": "AMPLIFICATION_FACTOR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16663,
                            "src": "30695:20:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 18263,
                            "name": "primaryStakedBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18240,
                            "src": "30670:20:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18264,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22661,
                          "src": "30670:24:28",
                          "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": 18266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30670:46:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18267,
                        "name": "primaryBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18246,
                        "src": "30731:14:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18268,
                        "name": "secondaryBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18252,
                        "src": "30760:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18269,
                          "name": "_rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18232,
                          "src": "30791:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                            "typeString": "struct Fraction memory"
                          }
                        },
                        "id": 18270,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "n",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22913,
                        "src": "30791:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18271,
                          "name": "_rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18232,
                          "src": "30813:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                            "typeString": "struct Fraction memory"
                          }
                        },
                        "id": 18272,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "d",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22915,
                        "src": "30813:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 18259,
                                "name": "BANCOR_FORMULA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21867,
                                "src": "30623:14:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 18258,
                              "name": "addressOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22052,
                              "src": "30613:9:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) view returns (address)"
                              }
                            },
                            "id": 18260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "30613:25:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18257,
                          "name": "IBancorFormula",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13177,
                          "src": "30598:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBancorFormula_$13177_$",
                            "typeString": "type(contract IBancorFormula)"
                          }
                        },
                        "id": 18261,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "30598:41:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBancorFormula_$13177",
                          "typeString": "contract IBancorFormula"
                        }
                      },
                      "id": 18262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balancedWeights",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13176,
                      "src": "30598:57:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint32_$_t_uint32_$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256) view external returns (uint32,uint32)"
                      }
                    },
                    "id": 18273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30598:223:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint32_$_t_uint32_$",
                      "typeString": "tuple(uint32,uint32)"
                    }
                  },
                  "functionReturnParameters": 18238,
                  "id": 18274,
                  "nodeType": "Return",
                  "src": "30591:230:28"
                }
              ]
            },
            "documentation": {
              "id": 18230,
              "nodeType": "StructuredDocumentation",
              "src": "29830:290:28",
              "text": " @dev returns the effective reserve weights based on the staked balance, current balance and oracle price\n @param _rate    rate between the reserve tokens\n @return new primary reserve weight\n @return new secondary reserve weight"
            },
            "id": 18276,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "effectiveReserveWeights",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18233,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18232,
                  "mutability": "mutable",
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18276,
                  "src": "30159:21:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Fraction_$22916_memory_ptr",
                    "typeString": "struct Fraction"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18231,
                    "name": "Fraction",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22916,
                    "src": "30159:8:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Fraction_$22916_storage_ptr",
                      "typeString": "struct Fraction"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30158:23:28"
            },
            "returnParameters": {
              "id": 18238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18235,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18276,
                  "src": "30204:6:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18234,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "30204:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18237,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18276,
                  "src": "30212:6:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18236,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "30212:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30203:16:28"
            },
            "scope": 18367,
            "src": "30126:703:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18336,
              "nodeType": "Block",
              "src": "31393:577:28",
              "statements": [
                {
                  "assignments": [
                    18289
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18289,
                      "mutability": "mutable",
                      "name": "token1Balance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18336,
                      "src": "31443:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18288,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31443:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18293,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18291,
                        "name": "_token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18279,
                        "src": "31484:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18290,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "31467:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31467:25:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31443:49:28"
                },
                {
                  "assignments": [
                    18295
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18295,
                      "mutability": "mutable",
                      "name": "token2Balance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18336,
                      "src": "31503:21:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 18294,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "31503:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18299,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18297,
                        "name": "_token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18281,
                        "src": "31544:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 18296,
                      "name": "amplifiedBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18229,
                      "src": "31527:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21461_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 18298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31527:25:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31503:49:28"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 18302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 18300,
                      "name": "_token1Weight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18283,
                      "src": "31608:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18301,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31625:1:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31608:18:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18311,
                  "nodeType": "IfStatement",
                  "src": "31604:91:28",
                  "trueBody": {
                    "id": 18310,
                    "nodeType": "Block",
                    "src": "31628:67:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18303,
                            "name": "_token1Weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18283,
                            "src": "31643:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 18304,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9040,
                                "src": "31659:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_struct$_Reserve_$9023_storage_$",
                                  "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                }
                              },
                              "id": 18306,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18305,
                                "name": "_token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18279,
                                "src": "31668:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21461",
                                  "typeString": "contract IERC20Token"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "31659:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                "typeString": "struct ConverterBase.Reserve storage ref"
                              }
                            },
                            "id": 18307,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "weight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9016,
                            "src": "31659:24:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "31643:40:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 18309,
                        "nodeType": "ExpressionStatement",
                        "src": "31643:40:28"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 18314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 18312,
                      "name": "_token2Weight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18285,
                      "src": "31751:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31768:1:28",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31751:18:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 18322,
                  "nodeType": "IfStatement",
                  "src": "31747:97:28",
                  "trueBody": {
                    "id": 18321,
                    "nodeType": "Block",
                    "src": "31771:73:28",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18315,
                            "name": "_token2Weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18285,
                            "src": "31786:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "id": 18318,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 18316,
                              "name": "PPM_RESOLUTION",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9007,
                              "src": "31802:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 18317,
                              "name": "_token1Weight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18283,
                              "src": "31819:13:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "src": "31802:30:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "31786:46:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 18320,
                        "nodeType": "ExpressionStatement",
                        "src": "31786:46:28"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18324,
                        "name": "_token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18279,
                        "src": "31877:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18325,
                        "name": "_token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18281,
                        "src": "31886:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18328,
                            "name": "_token1Weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18283,
                            "src": "31913:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 18326,
                            "name": "token2Balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18295,
                            "src": "31895:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22661,
                          "src": "31895:17:28",
                          "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": 18329,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31895:32:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18332,
                            "name": "_token2Weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18285,
                            "src": "31947:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 18330,
                            "name": "token1Balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18289,
                            "src": "31929:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 18331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22661,
                          "src": "31929:17:28",
                          "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": 18333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31929:32:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18323,
                      "name": "TokenRateUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9089,
                      "src": "31861:15:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint256,uint256)"
                      }
                    },
                    "id": 18334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31861:101:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18335,
                  "nodeType": "EmitStatement",
                  "src": "31856:106:28"
                }
              ]
            },
            "documentation": {
              "id": 18277,
              "nodeType": "StructuredDocumentation",
              "src": "30837:418:28",
              "text": " @dev dispatches token rate update event for the reserve tokens\n @param _token1          contract address of the token to calculate the rate of one unit of\n @param _token2          contract address of the token to calculate the rate of one `_token1` unit in\n @param _token1Weight    reserve weight of token1\n @param _token2Weight    reserve weight of token2"
            },
            "id": 18337,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "dispatchTokenRateUpdateEvent",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18286,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18279,
                  "mutability": "mutable",
                  "name": "_token1",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18337,
                  "src": "31299:19:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18278,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "31299:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18281,
                  "mutability": "mutable",
                  "name": "_token2",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18337,
                  "src": "31320:19:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18280,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "31320:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18283,
                  "mutability": "mutable",
                  "name": "_token1Weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18337,
                  "src": "31341:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18282,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "31341:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18285,
                  "mutability": "mutable",
                  "name": "_token2Weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18337,
                  "src": "31363:20:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 18284,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "31363:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31298:86:28"
            },
            "returnParameters": {
              "id": 18287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31393:0:28"
            },
            "scope": 18367,
            "src": "31261:709:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18356,
              "nodeType": "Block",
              "src": "32385:115:28",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18348,
                        "name": "_poolToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18340,
                        "src": "32417:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18349,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "32429:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 18350,
                          "name": "stakedBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16673,
                          "src": "32444:14:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21461_$_t_uint256_$",
                            "typeString": "mapping(contract IERC20Token => uint256)"
                          }
                        },
                        "id": 18352,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18351,
                          "name": "_reserveToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18344,
                          "src": "32459:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21461",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "32444:29:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18353,
                        "name": "_poolTokenSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18342,
                        "src": "32475:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ISmartToken_$21516",
                          "typeString": "contract ISmartToken"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21461",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18347,
                      "name": "TokenRateUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9089,
                      "src": "32401:15:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IERC20Token_$21461_$_t_contract$_IERC20Token_$21461_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint256,uint256)"
                      }
                    },
                    "id": 18354,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32401:91:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18355,
                  "nodeType": "EmitStatement",
                  "src": "32396:96:28"
                }
              ]
            },
            "documentation": {
              "id": 18338,
              "nodeType": "StructuredDocumentation",
              "src": "31978:274:28",
              "text": " @dev dispatches token rate update event for one of the pool tokens\n @param _poolToken       address of the pool token\n @param _poolTokenSupply total pool token supply\n @param _reserveToken    address of the reserve token"
            },
            "id": 18357,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "dispatchPoolTokenRateUpdateEvent",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18345,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18340,
                  "mutability": "mutable",
                  "name": "_poolToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18357,
                  "src": "32300:22:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ISmartToken_$21516",
                    "typeString": "contract ISmartToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18339,
                    "name": "ISmartToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21516,
                    "src": "32300:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISmartToken_$21516",
                      "typeString": "contract ISmartToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18342,
                  "mutability": "mutable",
                  "name": "_poolTokenSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18357,
                  "src": "32324:24:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18341,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32324:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18344,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18357,
                  "src": "32350:25:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21461",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 18343,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21461,
                    "src": "32350:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21461",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32299:77:28"
            },
            "returnParameters": {
              "id": 18346,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32385:0:28"
            },
            "scope": 18367,
            "src": "32258:242:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 18365,
              "nodeType": "Block",
              "src": "32620:29:28",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18363,
                    "name": "now",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": -17,
                    "src": "32638:3:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 18362,
                  "id": 18364,
                  "nodeType": "Return",
                  "src": "32631:10:28"
                }
              ]
            },
            "documentation": {
              "id": 18358,
              "nodeType": "StructuredDocumentation",
              "src": "32508:50:28",
              "text": " @dev returns the current time"
            },
            "id": 18366,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "time",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 18359,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32577:2:28"
            },
            "returnParameters": {
              "id": 18362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18361,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18366,
                  "src": "32611:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18360,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32611:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32610:9:28"
            },
            "scope": 18367,
            "src": "32564:85:28",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 18368,
        "src": "741:31911:28"
      }
    ],
    "src": "52:32602:28"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.3",
  "updatedAt": "2020-11-10T14:20:35.956Z",
  "devdoc": {
    "details": "Liquidity Pool v2 Converter The liquidity pool v2 converter is a specialized version of a converter that uses price oracles to rebalance the reserve weights in such a way that the primary token balance always strives to match the staked balance. This type of liquidity pool always has 2 reserves and the reserve weights are dynamic.",
    "events": {
      "OracleDeviationFeeUpdate(uint32,uint32)": {
        "details": "triggered when the oracle deviation fee is updated",
        "params": {
          "_newFee": "new fee percentage, represented in ppm",
          "_prevFee": "previous fee percentage, represented in ppm"
        }
      }
    },
    "kind": "dev",
    "methods": {
      "acceptAnchorOwnership()": {
        "details": "accepts ownership of the anchor after an ownership transfer also activates the converter can only be called by the contract owner note that prior to version 28, you should use 'acceptTokenOwnership' instead"
      },
      "acceptOwnership()": {
        "details": "used by a new owner to accept an ownership transfer"
      },
      "acceptTokenOwnership()": {
        "details": "deprecated, backward compatibility"
      },
      "activate(address,address,address)": {
        "details": "sets the pool's primary reserve token / price oracles and activates the pool each oracle must be able to provide the rate for each reserve token note that the oracle must be whitelisted prior to the call can only be called by the owner while the pool is inactive",
        "params": {
          "_primaryReserveOracle": "address of a chainlink price oracle for the primary reserve token",
          "_primaryReserveToken": "address of the pool's primary reserve token",
          "_secondaryReserveOracle": "address of a chainlink price oracle for the secondary reserve token"
        }
      },
      "addLiquidity(address,uint256,uint256)": {
        "details": "increases the pool's liquidity and mints new shares in the pool to the caller",
        "params": {
          "_amount": "amount of liquidity to add",
          "_minReturn": "minimum return-amount of pool tokens",
          "_reserveToken": "address of the reserve token to add liquidity to"
        },
        "returns": {
          "_0": "amount of pool tokens minted"
        }
      },
      "addReserve(address,uint32)": {
        "details": "defines a new reserve token for the converter can only be called by the owner while the converter is inactive and 2 reserves aren't defined yet",
        "params": {
          "_token": "address of the reserve token",
          "_weight": "reserve weight, represented in ppm, 1-1000000"
        }
      },
      "connectorTokenCount()": {
        "details": "deprecated, backward compatibility"
      },
      "connectorTokens(uint256)": {
        "details": "deprecated, backward compatibility"
      },
      "connectors(address)": {
        "details": "deprecated, backward compatibility"
      },
      "constructor": {
        "details": "initializes a new LiquidityPoolV2Converter instance",
        "params": {
          "_maxConversionFee": "maximum conversion fee, represented in ppm",
          "_poolTokensContainer": "pool tokens container governed by the converter",
          "_registry": "address of a contract registry contract"
        }
      },
      "convert(address,address,uint256,address,address)": {
        "details": "converts a specific amount of source tokens to target tokens can only be called by the bancor network contract",
        "params": {
          "_amount": "amount of tokens to convert (in units of the source token)",
          "_beneficiary": "wallet to receive the conversion result",
          "_sourceToken": "source ERC20 token",
          "_targetToken": "target ERC20 token",
          "_trader": "address of the caller who executed the conversion"
        },
        "returns": {
          "_0": "amount of tokens received (in units of the target token)"
        }
      },
      "converterType()": {
        "details": "returns the converter type",
        "returns": {
          "_0": "see the converter types in the the main contract doc"
        }
      },
      "disableMaxStakedBalances()": {
        "details": "disables the max staked balance mechanism available as a temporary mechanism during the beta once disabled, it cannot be re-enabled can only be called by the owner"
      },
      "effectiveReserveWeights()": {
        "details": "returns the effective reserve tokens weights",
        "returns": {
          "_0": "reserve1 weight",
          "_1": "reserve2 weight"
        }
      },
      "effectiveTokensRate()": {
        "details": "returns the effective rate of 1 primary token in secondary tokens",
        "returns": {
          "_0": "rate of 1 primary token in secondary tokens (numerator)",
          "_1": "rate of 1 primary token in secondary tokens (denominator)"
        }
      },
      "getConnectorBalance(address)": {
        "details": "deprecated, backward compatibility"
      },
      "getReturn(address,address,uint256)": {
        "details": "deprecated, backward compatibility"
      },
      "hasETHReserve()": {
        "details": "checks whether or not the converter has an ETH reserve",
        "returns": {
          "_0": "true if the converter has an ETH reserve, false otherwise"
        }
      },
      "isActive()": {
        "details": "returns true if the converter is active, false otherwise",
        "returns": {
          "_0": "true if the converter is active, false otherwise"
        }
      },
      "isV28OrHigher()": {
        "details": "checks whether or not the converter version is 28 or higher",
        "returns": {
          "_0": "true, since the converter version is 28 or higher"
        }
      },
      "liquidationLimit(address)": {
        "details": "returns the maximum number of pool tokens that can currently be liquidated",
        "params": {
          "_poolToken": "address of the pool token"
        },
        "returns": {
          "_0": "liquidation limit"
        }
      },
      "poolToken(address)": {
        "details": "returns the pool token address by the reserve token address",
        "params": {
          "_reserveToken": "reserve token address"
        },
        "returns": {
          "_0": "pool token address"
        }
      },
      "removeLiquidity(address,uint256,uint256)": {
        "details": "decreases the pool's liquidity and burns the caller's shares in the pool",
        "params": {
          "_amount": "amount of pool tokens to burn",
          "_minReturn": "minimum return-amount of reserve tokens",
          "_poolToken": "address of the pool token"
        },
        "returns": {
          "_0": "amount of liquidity removed"
        }
      },
      "removeLiquidityReturnAndFee(address,uint256)": {
        "details": "calculates the amount of reserve tokens entitled for a given amount of pool tokens note that a fee is applied according to the equilibrium level of the primary reserve token",
        "params": {
          "_amount": "amount of pool tokens",
          "_poolToken": "address of the pool token"
        },
        "returns": {
          "_0": "amount after fee and fee, in reserve token units"
        }
      },
      "reserveAmplifiedBalance(address)": {
        "details": "returns the amplified balance of a given reserve token",
        "params": {
          "_reserveToken": "reserve token address"
        },
        "returns": {
          "_0": "amplified balance"
        }
      },
      "reserveBalance(address)": {
        "details": "returns the reserve's balance note that prior to version 17, you should use 'getConnectorBalance' instead",
        "params": {
          "_reserveToken": "reserve token contract address"
        },
        "returns": {
          "_0": "reserve balance"
        }
      },
      "reserveStakedBalance(address)": {
        "details": "returns the staked balance of a given reserve token",
        "params": {
          "_reserveToken": "reserve token address"
        },
        "returns": {
          "_0": "staked balance"
        }
      },
      "reserveTokenCount()": {
        "details": "returns the number of reserve tokens defined note that prior to version 17, you should use 'connectorTokenCount' instead",
        "returns": {
          "_0": "number of reserve tokens"
        }
      },
      "reserveWeight(address)": {
        "details": "returns the reserve's weight added in version 28",
        "params": {
          "_reserveToken": "reserve token contract address"
        },
        "returns": {
          "_0": "reserve weight"
        }
      },
      "restoreRegistry()": {
        "details": "restores the previous contract-registry"
      },
      "restrictRegistryUpdate(bool)": {
        "details": "restricts the permission to update the contract-registry",
        "params": {
          "_onlyOwnerCanUpdateRegistry": "indicates whether or not permission is restricted to owner only"
        }
      },
      "setConversionFee(uint32)": {
        "details": "updates the current conversion fee can only be called by the contract owner",
        "params": {
          "_conversionFee": "new conversion fee, represented in ppm"
        }
      },
      "setConversionWhitelist(address)": {
        "details": "allows the owner to update & enable the conversion whitelist contract address when set, only addresses that are whitelisted are actually allowed to use the converter note that the whitelist check is actually done by the BancorNetwork contract",
        "params": {
          "_whitelist": "address of a whitelist contract"
        }
      },
      "setMaxStakedBalances(uint256,uint256)": {
        "details": "sets the max staked balance for both reserves available as a temporary mechanism during the beta can only be called by the owner",
        "params": {
          "_reserve1MaxStakedBalance": "max staked balance for reserve 1",
          "_reserve2MaxStakedBalance": "max staked balance for reserve 2"
        }
      },
      "setOracleDeviationFee(uint32)": {
        "details": "updates the current oracle deviation fee can only be called by the contract owner",
        "params": {
          "_oracleDeviationFee": "new oracle deviation fee, represented in ppm"
        }
      },
      "setReserveStakedBalance(address,uint256)": {
        "details": "sets the reserve's staked balance can only be called by the upgrader contract while the upgrader is the owner",
        "params": {
          "_balance": "new reserve staked balance",
          "_reserveToken": "reserve token address"
        }
      },
      "targetAmountAndFee(address,address,uint256)": {
        "details": "returns the expected target amount of converting one reserve to another along with the fee",
        "params": {
          "_amount": "amount of tokens received from the user",
          "_sourceToken": "contract address of the source reserve token",
          "_targetToken": "contract address of the target reserve token"
        },
        "returns": {
          "_0": "expected target amount",
          "_1": "expected fee"
        }
      },
      "token()": {
        "details": "deprecated since version 28, backward compatibility - use only for earlier versions"
      },
      "transferAnchorOwnership(address)": {
        "details": "transfers the anchor ownership the new owner needs to accept the transfer can only be called by the converter upgrder while the upgrader is the owner note that prior to version 28, you should use 'transferAnchorOwnership' instead",
        "params": {
          "_newOwner": "new token owner"
        }
      },
      "transferOwnership(address)": {
        "details": "allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner",
        "params": {
          "_newOwner": "new contract owner"
        }
      },
      "transferTokenOwnership(address)": {
        "details": "deprecated, backward compatibility"
      },
      "updateRegistry()": {
        "details": "updates to the new contract-registry"
      },
      "upgrade()": {
        "details": "upgrades the converter to the latest version can only be called by the owner note that the owner needs to call acceptOwnership on the new converter after the upgrade"
      },
      "withdrawETH(address)": {
        "details": "withdraws ether can only be called by the owner if the converter is inactive or by upgrader contract can only be called after the upgrader contract has accepted the ownership of this contract can only be called if the converter has an ETH reserve",
        "params": {
          "_to": "address to send the ETH to"
        }
      },
      "withdrawFromAnchor(address,address,uint256)": {
        "details": "withdraws tokens held by the anchor and sends them to an account can only be called by the owner",
        "params": {
          "_amount": "amount to withdraw",
          "_to": "account to receive the new amount",
          "_token": "ERC20 token contract address"
        }
      },
      "withdrawTokens(address,address,uint256)": {
        "details": "withdraws tokens held by the converter and sends them to an account can only be called by the owner note that reserve tokens can only be withdrawn by the owner while the converter is inactive unless the owner is the converter upgrader contract",
        "params": {
          "_amount": "amount to withdraw",
          "_to": "account to receive the new amount",
          "_token": "ERC20 token contract address"
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}